Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upload fails with an Internal Server Error #343

Closed
wgalanciak opened this issue Sep 28, 2021 · 25 comments · Fixed by #354
Closed

Upload fails with an Internal Server Error #343

wgalanciak opened this issue Sep 28, 2021 · 25 comments · Fixed by #354
Labels
server Component: server

Comments

@wgalanciak
Copy link

Since Thursday, September 22nd, we have not been able to upload a new version of our extension (https://open-vsx.org/extension/genuitecllc/codetogether) to the registry.

We have tried several times over the last few days but still no luck. We also tried to create a new token but the result is the same.

Here is the whole output from the command execution:

❌ Internal Server Error
See the documentation for more information:
https://github.com/eclipse/openvsx/wiki/Publishing-Extensions

@spoenemann spoenemann added the server Component: server label Sep 29, 2021
@spoenemann
Copy link
Member

@mbarbero could you look into the logs? Do you need a more precise timestamp?

@mbarbero
Copy link
Member

mbarbero commented Sep 29, 2021

Yes, more precise timestamp will be required here. Thanks!

Also, if ovsx has some verbose logging, it should be enabled.

@spoenemann
Copy link
Member

It has a --debug flag that you could try @wgalanciak, but I don't know whether that will provide any relevant details.

@wgalanciak
Copy link
Author

wgalanciak commented Sep 29, 2021

Right, --debug flag does not tell us more.

Here is a full response with a timestamp:

{
  timestamp: '2021-09-29T15:18:11.373+00:00',
  status: 500,
  error: 'Internal Server Error',
  message: '',
  path: '/api/-/publish'
}

@toddewilliams
Copy link

Could the issue possibly be an enormous load spike on the Open VSX Registry due to the release of OpenVSCode Server? I believe they hook to the registry in all their instances by default.

Or have you determined that it's not load related and localized to just this update? Or is it an issue with all/many updates?

@spoenemann
Copy link
Member

@mbarbero could you look up the logs at the timestamp given above?

@mbarbero
Copy link
Member

mbarbero commented Oct 1, 2021

@toddewilliams, it's unlikely. There has been dozen of new versions being published during the week, and we only got this report.

@spoenemann, @wgalanciak application logs from Sept 29th are gone. Would you mind re-trying and giving me a new response with timestamp? Thanks!

@wgalanciak
Copy link
Author

Sure, here it is:

{
  timestamp: '2021-10-05T17:40:40.378+00:00',
  status: 500,
  error: 'Internal Server Error',
  message: '',
  path: '/api/-/publish'
}

@mbarbero
Copy link
Member

mbarbero commented Oct 6, 2021

openvsx logs are very verbose and plagued with some error from #345. It means logs from yesterday are already almost already gone and I cannot find anything at the given timestamp.

It seems that we're not in the same timezone. Could we schedule the test so that I can have a look at the logs in a timely manner? I'm in CEST. Thanks!

@wgalanciak
Copy link
Author

Please let me know if 9:00 am CEST next Monday (11.10) is fine for you.

@mbarbero
Copy link
Member

mbarbero commented Oct 8, 2021

LGTM. Thanks!

@wgalanciak
Copy link
Author

As planned, I have tried to upload twice using two different tokens (a new one and one from 1 year ago):

{
  timestamp: '2021-10-11T07:00:22.963+00:00',
  status: 500,
  error: 'Internal Server Error',
  message: '',
  path: '/api/-/publish'
}
{
  timestamp: '2021-10-11T07:02:00.516+00:00',
  status: 500,
  error: 'Internal Server Error',
  message: '',
  path: '/api/-/publish'
}

@mbarbero
Copy link
Member

Thank you!

@spoenemann , it seems that one of the column has a VARCHAR(2048) type that is not validated at the API level.

2021-10-11 07:02:00.513  WARN 1 --- [-8080-exec-1231] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 0, SQLState: 22001
2021-10-11 07:02:00.513 ERROR 1 --- [-8080-exec-1231] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: value too long for type character varying(2048)
2021-10-11 07:02:00.516 ERROR 1 --- [-8080-exec-1231] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement] with root cause

org.postgresql.util.PSQLException: ERROR: value too long for type character varying(2048)
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2553) ~[postgresql-42.2.18.jar:42.2.18]
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2285) ~[postgresql-42.2.18.jar:42.2.18]
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:323) ~[postgresql-42.2.18.jar:42.2.18]
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:473) ~[postgresql-42.2.18.jar:42.2.18]
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:393) ~[postgresql-42.2.18.jar:42.2.18]
        at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:164) ~[postgresql-42.2.18.jar:42.2.18]
        at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:130) ~[postgresql-42.2.18.jar:42.2.18]
        at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61) ~[HikariCP-3.4.5.jar:na]
        at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.5.jar:na]
        at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3254) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3781) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:107) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.engine.spi.ActionQueue.lambda$executeActions$1(ActionQueue.java:478) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:684) ~[na:na]
        at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:475) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:348) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:57) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:102) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1327) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1407) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1565) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1533) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.query.Query.getResultList(Query.java:165) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:76) ~[hibernate-core-5.4.23.Final.jar:5.4.23.Final]
        at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:126) ~[spring-data-jpa-2.4.1.jar:2.4.1]
        at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88) ~[spring-data-jpa-2.4.1.jar:2.4.1]
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155) ~[spring-data-jpa-2.4.1.jar:2.4.1]
        at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143) ~[spring-data-jpa-2.4.1.jar:2.4.1]
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.4.1.jar:2.4.1]
        at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.4.1.jar:2.4.1]
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152) ~[spring-data-commons-2.4.1.jar:2.4.1]
        at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131) ~[spring-data-commons-2.4.1.jar:2.4.1]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:371) ~[spring-tx-5.3.1.jar:5.3.1]
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:134) ~[spring-tx-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145) ~[spring-data-jpa-2.4.1.jar:2.4.1]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.1.jar:5.3.1]
        at com.sun.proxy.$Proxy193.findByExtensionAndPreviewAndActiveTrue(Unknown Source) ~[na:na]
        at jdk.internal.reflect.GeneratedMethodAccessor173.invoke(Unknown Source) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) ~[spring-aop-5.3.1.jar:5.3.1]
        at com.sun.proxy.$Proxy120.findByExtensionAndPreviewAndActiveTrue(Unknown Source) ~[na:na]
        at org.eclipse.openvsx.repositories.RepositoryService.findActiveVersions(RepositoryService.java:123) ~[classes/:na]
        at org.eclipse.openvsx.ExtensionService.getLatestVersion(ExtensionService.java:222) ~[classes/:na]
        at org.eclipse.openvsx.ExtensionService.updateExtension(ExtensionService.java:201) ~[classes/:na]
        at org.eclipse.openvsx.ExtensionService.publishVersion(ExtensionService.java:76) ~[classes/:na]
        at org.eclipse.openvsx.ExtensionService$$FastClassBySpringCGLIB$$92cc76a4.invoke(<generated>) ~[classes/:na]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) ~[spring-aop-5.3.1.jar:5.3.1]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.1.jar:5.3.1]

@spoenemann
Copy link
Member

Ok thanks! This seems to be a side-effect of #264. The field size violation can be from the engines, categories or tags field. @wgalanciak can you guess by looking at your package.json which of this fields may be causing the size violation of 2048 characters? The entries are concatenated into a comma-separated string.

To Do:

  • Validate the fields mentioned above so users get a proper error message instead of a 500.
  • Increase the size of the field that is currently too small via DB migration.

@amvanbaren could you take over and address these topics?

@amvanbaren
Copy link
Contributor

The size violation could also be from the dependencies or bundledExtensions fields.

@TimWebb
Copy link

TimWebb commented Oct 19, 2021

Checking the package.json that we are uploading, we have a minimal engines and categories value, not using tags nor bundledExtensions, and dependencies is 1345 characters. Since our previous release, there were a couple dependencies added but not much can be removed from these two other ones:

"engines": { "vscode": "^1.44.0" }
"categories": [ "Other" ]

If at all helpful for debugging, the VSIX we are trying to upload can also be accessed from https://www.codetogether.com/download/vscode/

Any help on this would be superb as we have customers impacted who rely on OpenVSX. Thanks kindly!

@amvanbaren
Copy link
Contributor

@TimWebb I tried publishing codetogether. It failed on this statement:
insert into extension_version (active, bugs, bundled_extensions, categories, dependencies, description, display_name, engines, extension_id, extension_kind, gallery_color, gallery_theme, homepage, license, markdown, preview, published_with_id, qna, repository, tags, timestamp, version, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

binding parameter [1] as [BOOLEAN] - [true]
binding parameter [2] as [VARCHAR] - []
binding parameter [3] as [VARCHAR] - [null]
binding parameter [4] as [VARCHAR] - [Other]
binding parameter [5] as [VARCHAR] - [null]
binding parameter [6] as [VARCHAR] - [Add CodeTogether to VS Code to live share your IDE and coding sessions. Cross-IDE support for VS Code, IntelliJ and Eclipse. Free plan always available!]
binding parameter [7] as [VARCHAR] - [CodeTogether]
binding parameter [8] as [VARCHAR] - [vscode@^1.44.0]
binding parameter [9] as [BIGINT] - [305]
binding parameter [10] as [VARCHAR] - [null]
binding parameter [11] as [VARCHAR] - [#000000]
binding parameter [12] as [VARCHAR] - [dark]
binding parameter [13] as [VARCHAR] - []
binding parameter [14] as [VARCHAR] - [SEE LICENSE IN LICENSE]
binding parameter [15] as [VARCHAR] - [null]
binding parameter [16] as [BOOLEAN] - [false]
binding parameter [17] as [BIGINT] - [11]
binding parameter [18] as [VARCHAR] - [null]
binding parameter [19] as [VARCHAR] - [https://github.com/Genuitec/CodeTogether]
binding parameter [20] as [VARCHAR] - [share,pair programming,team,remote,collaboration,debuggers,ct-plaintext,CodeTogether Plain Text,CodeTogether text,ct-jsonc,CodeTogether JSON with Comments,ct-bat,CodeTogether Batch,CodeTogether bat,ct-clojure,CodeTogether Clojure,CodeTogether clojure,ct-coffeescript,CodeTogether Coffeescript,CodeTogether coffeescript,ct-csharp,CodeTogether CSharp,CodeTogether C#,CodeTogether csharp,ct-css,CodeTogether CSS,CodeTogether css,ct-fsharp,CodeTogether F#,CodeTogether FSharp,CodeTogether fsharp,ct-groovy,CodeTogether Groovy,CodeTogether groovy,ct-handlebars,CodeTogether Handlebars,CodeTogether handlebars,ct-hlsl,CodeTogether HLSL,CodeTogether hlsl,ct-ini,CodeTogether INI,CodeTogether ini,CodeTogether properties,CodeTogether toml,ct-log,CodeTogether log,ct-lua,CodeTogether Lua,CodeTogether lua,ct-makefile,CodeTogether Makefile,CodeTogether makefile,ct-objective-c,CodeTogether Objective-C,ct-perl,CodeTogether Perl,CodeTogether perl,ct-powershell,CodeTogether PowerShell,CodeTogether powershell,CodeTogether ps,CodeTogether ps1,ct-jade,CodeTogether Pug,CodeTogether Jade,CodeTogether jade,ct-r,CodeTogether R,CodeTogether r,ct-razor,CodeTogether Razor,CodeTogether razor,ct-shaderlab,CodeTogether ShaderLab,CodeTogether shaderlab,ct-sql,CodeTogether SQL,ct-swift,CodeTogether Swift,CodeTogether swift,ct-vb,CodeTogether Visual Basic,CodeTogether vb,ct-html,CodeTogether HTML,CodeTogether htm,CodeTogether html,CodeTogether xhtml,ct-jsp,CodeTogether Java Server Pages,CodeTogether jsp,CodeTogether JSP,CodeTogether jstl,CodeTogether JSTL,ct-less,CodeTogether Less,CodeTogether less,ct-scss,CodeTogether Scss,CodeTogether scss,ct-markdown,CodeTogether Markdown,CodeTogether markdown,ct-shell,CodeTogether Shell,CodeTogether sh,ct-tcl,CodeTogether TCL,CodeTogether tcl,CodeTogether Tcl,ct-xml,CodeTogether XML,CodeTogether xml,ct-xsl,CodeTogether XSL,CodeTogether xsl,ct-java,CodeTogether Java,CodeTogether java,ct-typescript,CodeTogether TypeScript,CodeTogether typescript,CodeTogether ts,ct-typescriptreact,CodeTogether TypeScript React,CodeTogether tsx,ct-javascript,CodeTogether JavaScript,CodeTogether javascript,CodeTogether js,ct-javascriptreact,CodeTogether JavaScript React,CodeTogether jsx,ct-jsx-tags,ct-python,CodeTogether Python,CodeTogether py,ct-go,CodeTogether Go,CodeTogether go,ct-rust,CodeTogether Rust,CodeTogether rust,ct-php,CodeTogether PHP,CodeTogether php,ct-c,CodeTogether C,CodeTogether c,ct-cpp,CodeTogether C++,CodeTogether Cpp,CodeTogether cpp,ct-json,CodeTogether JSON,CodeTogether json,ct-kotlin,CodeTogether kotlin,CodeTogether Kotlin,ct-vue,CodeTogether vue,CodeTogether Vue,ct-scala,CodeTogether Scala,CodeTogether scala,ct-twig,CodeTogether twig,CodeTogether Twig,ct-Cobol,CodeTogether Cobol,CodeTogether cobol,ct-elixir,CodeTogether Elixir,CodeTogether elixir,ct-dart,CodeTogether Dart,CodeTogether dart,ct-yaml,CodeTogether yaml,CodeTogether Yaml,ct-diff,CodeTogether Diff,CodeTogether diff,ct-docker,CodeTogether Docker,CodeTogether docker,ct-objective-cpp,CodeTogether Objective-Cpp,CodeTogether Objective-C++,ct-ruby,CodeTogether Ruby,CodeTogether ruby,ct-abap,CodeTogether abap,CodeTogether Abap,ct-latex,CodeTogether Latex,CodeTogether latex,ct-bibtex,CodeTogether BibTex,CodeTogether bibtex]
binding parameter [21] as [TIMESTAMP] - [2021-10-21T07:06:17.153991]
binding parameter [22] as [VARCHAR] - [4.2.0]
binding parameter [23] as [BIGINT] - [306]

@spoenemann The tags parameter contains 3234 chars. The MetaData.Tags field in extension.vsixmanifest seems to be a concatenation of the keywords and languages fields in package.json.

The standard text analyzer in ElasticSearch converts text to lowercase. I can make tags case insensitive in the server to remove duplicates. Another solution is to increase the tags column size to 4096. What do you think is the best course of action?

@spoenemann
Copy link
Member

Oh I see. the difference in the Tags field is probably caused by this change?
https://github.com/eclipse/openvsx/pull/326/files#diff-1b6d55d467cf4e548b5a15698c7ceb4db72404cd83fd4ee53324964972a4ee63

Maybe we should revert the fetching of tags to the previous version:

extension.setTags(getStringList(packageJson.path("keywords")));

and additionally increase the column size to be sure?

@amvanbaren
Copy link
Contributor

Oh I see. the difference in the Tags field is probably caused by this change?

Yes, the change was introduced in getMetadata()

Maybe we should revert the fetching of tags to the previous version

By adding languages to tags you can search for e.g. Java and find all extensions that support the language. Although most extensions will probably mention this in keywords, name or description fields as well. I don't know how the revert will impact search.

If we do revert back to the previous version, then all extension versions need to be re-processed. The easy but inaccurate solution would be to take the first 5 tags for every already published extension version.
The lower casing solution also requires re-processing of extension versions, but it can be accurately done via some SQL queries in a DB migration script.

and additionally increase the column size to be sure?

The keywords array is limited to 5 items (extension manifest).
After re-processing the extension versions, we might be able to shrink the tags column.

@jeanp413
Copy link
Contributor

jeanp413 commented Oct 21, 2021

@spoenemann @amvanbaren In general we should use the info in vsixManifest as that's the same info MS uses in it's marketplace (vsixManifest is generated by processing the package.json file by vsce ) , also, in the case of tags, some additional tags are added like the __web_extension tag.
Also it would be good to query the ms marketplace for the codetogether extension and check if they truncate the tags or not, before doing it ourselves.

@amvanbaren
Copy link
Contributor

Also it would be good to query the ms marketplace for the codetogether extension and check if they truncate the tags or not.

Good point. I'll query the ms marketplace to see what tags it returns.

@amvanbaren
Copy link
Contributor

@jeanp413 @spoenemann It looks like the ms marketplace only keeps the first occurance of a tag. Comparison between tags is case insensitive, but the case of the first occurance is preserved in the resulting tags list.
codetogether-tags.xlsx

@toddewilliams
Copy link

Just wanted to say thank you all for the fix. As it turns out it's quite timely as we're shipping CodeTogether 5.0 today and will be testing the fix by uploading the extension quite soon.

@TimWebb
Copy link

TimWebb commented Oct 29, 2021

As Todd mentions, appreciated!

@amvanbaren Do you know what the timeline may look like for this being released to production? We release CodeTogether 5 yesterday and OpenVSX users continue to be stuck back on version 4.1. Thanks kindly and have a nice weekend!

@amvanbaren
Copy link
Contributor

@TimWebb I've created PR #722. Once it works on staging, I'll create a PR to push it to production.

This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
server Component: server
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants