Skip to content

Commit

Permalink
server: cleanup control chars from jsonb (#1034)
Browse files Browse the repository at this point in the history
  • Loading branch information
brig authored Nov 15, 2024
1 parent 617c49e commit 69215c0
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
Expand All @@ -53,14 +54,17 @@ public class DefaultEventReportingService implements EventReportingService, Exec
private final int maxBatchSize;
private final Object batchLock = new Object();
private final ScheduledExecutorService flushScheduler;
private final PersistenceService persistenceService;

@Inject
public DefaultEventReportingService(InstanceId instanceId,
ProcessConfiguration processConfiguration,
ApiClient apiClient) {
ApiClient apiClient,
PersistenceService persistenceService) {
this.instanceId = instanceId;
this.processEventsApi = new ProcessEventsApi(apiClient);
this.maxBatchSize = processConfiguration.events().batchSize();
this.persistenceService = persistenceService;
this.eventQueue = initializeQueue(maxBatchSize);
this.flushScheduler = Executors.newSingleThreadScheduledExecutor();

Expand Down Expand Up @@ -132,6 +136,9 @@ private void sendBatch(List<ProcessEventRequest> eventBatch) {
try {
getProcessEventsApi().batchEvent(instanceId.getValue(), eventBatch);
} catch (ApiException e) {
for (var event: eventBatch) {
saveEvent(event);
}
log.warn("Error while sending batch of {} event{} to the server: {}",
eventBatch.size(), eventBatch.isEmpty() ? "" : "s", e.getMessage());
}
Expand All @@ -141,6 +148,7 @@ private void sendSingle(ProcessEventRequest req) {
try {
getProcessEventsApi().event(instanceId.getValue(), req);
} catch (ApiException e) {
saveEvent(req);
log.warn("error while sending an event to the server: {}", e.getMessage());
}
}
Expand Down Expand Up @@ -171,4 +179,11 @@ public void run() {
}
}

private void saveEvent(ProcessEventRequest event) {
try {
persistenceService.persistFile("invalid_event_" + UUID.randomUUID() + ".json", out -> processEventsApi.getApiClient().getObjectMapper().writeValue(out, event));
} catch (Exception e) {
log.warn("can't save event", e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand Down Expand Up @@ -81,7 +81,7 @@ private static class MockedEventReportingService extends DefaultEventReportingSe
private final AtomicInteger flushCounter;

public MockedEventReportingService(ProcessConfiguration processConfiguration) {
super(new InstanceId(UUID.randomUUID()), processConfiguration, mock(ApiClient.class));
super(new InstanceId(UUID.randomUUID()), processConfiguration, mock(ApiClient.class), mock(PersistenceService.class));
this.mockProcessEventsApi = mock(ProcessEventsApi.class);
this.flushCounter = new AtomicInteger();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -29,6 +29,7 @@
import javax.inject.Singleton;
import java.io.IOException;
import java.util.Map;
import java.util.regex.Pattern;

@Named
@Singleton
Expand All @@ -37,6 +38,8 @@ public class ConcordObjectMapper {
public static final TypeReference<Map<String, Object>> MAP_TYPE = new TypeReference<Map<String, Object>>() {
};

private static final Pattern CONTROL_CHARS = Pattern.compile("[\\x00-\\x1F]");

private final ObjectMapper delegate;

@Inject
Expand Down Expand Up @@ -113,7 +116,7 @@ public <T> T fromString(String s, Class<T> valueType) {
}

private static String removeUnsupportedEscape(String str) {
return str.replace("\\u0000", "");
return CONTROL_CHARS.matcher(str).replaceAll("");
}

private <T> T deserialize(String o, TypeReference<T> valueTypeRef) {
Expand Down

0 comments on commit 69215c0

Please sign in to comment.