Skip to content

Commit

Permalink
[UNDERTOW-2332] invlidate cache on send op if size and send dont match
Browse files Browse the repository at this point in the history
  • Loading branch information
baranowb committed Mar 25, 2024
1 parent 357f54b commit 0d7efb8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
8 changes: 8 additions & 0 deletions core/src/main/java/io/undertow/UndertowLogger.java
Original file line number Diff line number Diff line change
Expand Up @@ -476,4 +476,12 @@ void nodeConfigCreated(URI connectionURI, String balancer, String domain, String
@LogMessage(level = WARN)
@Message(id = 5104, value = "Could not register resource change listener for caching resource manager, automatic invalidation of cached resource will not work. TTL value configured '%sms'. Defaulting to '%sms'.")
void failedToRegisterChangeListener(int ttl, int defaultTtl, @Cause Exception e);

@LogMessage(level = WARN)
@Message(id = 5105, value = "Cache entry content mismatch for '%s'. Expected length '%s', but was '%s'.")
void cacheEntryMismatchContent(Object key, int cacheIndicatedSize, long written);

@LogMessage(level = WARN)
@Message(id = 5106, value = "Content mismatch for '%s'. Expected length '%s', but was '%s'.")
void contentEntryMismatch(Object key, long indicatedSize, long written);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

import io.undertow.UndertowLogger;
import io.undertow.io.IoCallback;
import io.undertow.io.Sender;
import org.xnio.Buffers;
Expand Down Expand Up @@ -124,6 +125,7 @@ public void close(final IoCallback callback) {
@Override
public void close() {
if (written != length) {
UndertowLogger.ROOT_LOGGER.contentEntryMismatch(cacheEntry.key(),length, written);
cacheEntry.disable();
cacheEntry.dereference();
}
Expand All @@ -142,7 +144,13 @@ private void handleUpdate(final ByteBuffer origSrc) {
//prepare buffers for reading
buffer.flip();
}
cacheEntry.enable();
if(written == cacheEntry.size()) {
cacheEntry.enable();
} else {
UndertowLogger.ROOT_LOGGER.cacheEntryMismatchContent(cacheEntry.key(),cacheEntry.size(), written);
cacheEntry.disable();
cacheEntry.dereference();
}
}
}

Expand Down Expand Up @@ -170,7 +178,13 @@ private void handleUpdate(final ByteBuffer[] origSrc, long totalWritten) {
//prepare buffers for reading
buffer.flip();
}
cacheEntry.enable();
if(cacheEntry.size() == written) {
cacheEntry.enable();
} else {
UndertowLogger.ROOT_LOGGER.cacheEntryMismatchContent(cacheEntry.key(),cacheEntry.size(), written);
cacheEntry.disable();
cacheEntry.dereference();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
import org.xnio.conduits.Conduits;
import org.xnio.conduits.StreamSinkConduit;

import io.undertow.UndertowLogger;

/**
* @author Stuart Douglas
*/
Expand Down Expand Up @@ -82,7 +84,13 @@ public int write(final ByteBuffer src) throws IOException {
//prepare buffers for reading
buffer.flip();
}
cacheEntry.enable();
if(cacheEntry.size() == written) {
cacheEntry.enable();
} else {
UndertowLogger.ROOT_LOGGER.cacheEntryMismatchContent(cacheEntry.key(),cacheEntry.size(), written);
cacheEntry.disable();
cacheEntry.dereference();
}
}
}
return totalWritten;
Expand Down Expand Up @@ -120,7 +128,13 @@ public long write(final ByteBuffer[] srcs, final int offs, final int len) throws
//prepare buffers for reading
buffer.flip();
}
cacheEntry.enable();
if(cacheEntry.size() == written) {
cacheEntry.enable();
} else {
UndertowLogger.ROOT_LOGGER.cacheEntryMismatchContent(cacheEntry.key(),cacheEntry.size(), written);
cacheEntry.disable();
cacheEntry.dereference();
}
}
}
return totalWritten;
Expand Down

0 comments on commit 0d7efb8

Please sign in to comment.