Skip to content

Conversation

@scottf
Copy link
Contributor

@scottf scottf commented Sep 26, 2023

No description provided.

@scottf scottf requested review from Jarema and piotrpio September 26, 2023 20:29
this.memStorage = cc.memStorage;
this.backoff = cc.backoff == null ? null : new ArrayList<>(cc.backoff);
this.metadata = cc.metadata == null ? null : new HashMap<>(cc.metadata);
this.filterSubjects = cc.filterSubjects == null ? null : new ArrayList<>(cc.filterSubjects);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was not released. I released that I need this to be null and not an empty list because it's the only way to determine if the user sets data in the list, which they could set empty, and this is used for comparison against a server version of the config during subscribe to ensure there are no mismatches.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't quite get it. You're setting this.filterSubjects to null only if cc.filterSubjects is null, so for empty list it would still be an empty list no? The only change here is that you make a copy of cc.filterSubjects.

Copy link
Contributor Author

@scottf scottf Sep 29, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this.filterSubjects is final and must be set with something, even if it's null

The reason I copy it is because I always copy list input to constructors because people have reported bugs because they re-used a list or structure. Probably not necessary, just paranoid.

}
else {
filterSubjects = Collections.singletonList(tempFs);
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved this down a bit in the code since it is more than a one liner

else if (filterSubjects.size() == 1) {
JsonUtils.addField(sb, FILTER_SUBJECT, filterSubjects.get(0));
}
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved down, no change

}
if (cc.filterSubjects != null) {
this.filterSubjects = new ArrayList<>(cc.filterSubjects);
}
Copy link
Contributor Author

@scottf scottf Sep 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

always make a copy of lists because user's sometimes re-use and modify

createDefaultTestStream(jsm);
String stream = stream();
String subject = subject();
createMemoryStream(nc, stream, subject);
Copy link
Contributor Author

@scottf scottf Sep 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Whenever I'm in tests now, I make them less generic, meaning I give unique values to things like stream and subject instead of using a fixed constant. There is no difference in test behavior, but this will allow me to re-use server instances in the future if necessary, as sometimes resources on build machines are low, and not having to start up a server every time would reduce failures based on inability to start servers. The change will allow allow more parallelization of tests.

@Test
public void testNoWait() throws Exception {
runInJsServer(nc -> {
runInJsServer(noPullWarnings(), nc -> {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this reduces unnecessary output on tests.


@Test
public void testListsAreEqual() {
public void testConsumerFilterSubjectsAreEquivalent() {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changed the name to match the method being tested, which changed it's name to clearer.

public static void runInJsServer(VersionCheck vc, ErrorListener el, InServerTest inServerTest) throws Exception {
runInServer(false, true, new Options.Builder().errorListener(el), vc, inServerTest);
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

macro to make it easier to test only if a server version is appropriate. Useful during regression tests against older servers.

this.memStorage = cc.memStorage;
this.backoff = cc.backoff == null ? null : new ArrayList<>(cc.backoff);
this.metadata = cc.metadata == null ? null : new HashMap<>(cc.metadata);
this.filterSubjects = cc.filterSubjects == null ? null : new ArrayList<>(cc.filterSubjects);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't quite get it. You're setting this.filterSubjects to null only if cc.filterSubjects is null, so for empty list it would still be an empty list no? The only change here is that you make a copy of cc.filterSubjects.

}

if (subject.contains(".>.")) {
int x = 0;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we just throw error here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that was debug. I need to remove it.

Copy link
Contributor

@piotrpio piotrpio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@scottf scottf merged commit e3e5bad into main Sep 29, 2023
@scottf scottf deleted the multiple-subject-filters-review branch September 29, 2023 14:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants