diennea / blazingcache Goto Github PK
View Code? Open in Web Editor NEWBlazing Fast Distributed Cache
Home Page: https://blazingcache.org
License: Apache License 2.0
Blazing Fast Distributed Cache
Home Page: https://blazingcache.org
License: Apache License 2.0
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-44
Reporter: eolivelli @eolivelli
I've been asked for supporting PHP for BlazingCache, the first step could be to implement the Redis Protocol
http://redis.io/topics/protocol
Enrico Olivelli 2016-07-25T12:35:41.000+0200
for the server side protocol implementation we could just use
https://github.com/yulin2/redis-protocol
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-27
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-58
Reporter: nicolo.boschi @nicoloboschi
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-37
Reporter: alessandro.luccaroni @aluccaroni
16-05-19-04-17-15 Unknown channel option: SO_TIMEOUT=0
Found in the log at startup
Enrico Olivelli 2016-06-13T09:20:46.000+0200
Actually on Netty that option has no value, it must be implemented using http://netty.io/4.0/api/io/netty/handler/timeout/ReadTimeoutHandler.html
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-52
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-25
Reporter: eolivelli @eolivelli
The fix for BLAZ-24, which introduced local locks in order to serialize access to entries locally, introduced a new race condition which leads to deadlock (resolved automaticallly by timeouts)
The case is the following:
deadlock !!
Enrico Olivelli 2016-03-25T10:54:37.000+0100
merged #53
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-49
Reporter: eolivelli @eolivelli
The idea is to let the client use the parameters in the querystring of the URI to set cache parameters.
For instance the Hibernate use of JCache does not yet enable the user to set additional properties
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-63
Reporter: eolivelli @eolivelli
{code:java}
java.security.PrivilegedActionException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - Server not found in Kerberos database)]
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at blazingcache.security.sasl.SaslNettyClient.evaluateChallenge(SaslNettyClient.java:114)
at blazingcache.security.sasl.ClientAuthenticationUtils.performAuthentication(ClientAuthenticationUtils.java:44)
at blazingcache.network.netty.GenericNettyBrokerLocator.connect(GenericNettyBrokerLocator.java:88)
at blazingcache.client.CacheClient.connect(CacheClient.java:322)
at blazingcache.client.CacheClient.access$300(CacheClient.java:59)
at blazingcache.client.CacheClient$ConnectionManager.run(CacheClient.java:360)
at java.lang.Thread.run(Thread.java:745)
Caused by: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - Server not found in Kerberos database)]
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211)
at blazingcache.security.sasl.SaslNettyClient$2.run(SaslNettyClient.java:116)
at blazingcache.security.sasl.SaslNettyClient$2.run(SaslNettyClient.java:114)
... 9 more
Caused by: GSSException: No valid credentials provided (Mechanism level: Server not found in Kerberos database (7) - Server not found in Kerberos database)
at sun.security.jgss.krb5.Krb5Context.initSecContext(Krb5Context.java:770)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:248)
at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:179)
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:192)
... 11 more
Caused by: KrbException: Server not found in Kerberos database (7) - Server not found in Kerberos database
at sun.security.krb5.KrbTgsRep.(KrbTgsRep.java:73)
at sun.security.krb5.KrbTgsReq.getReply(KrbTgsReq.java:259)
at sun.security.krb5.KrbTgsReq.sendAndGetCreds(KrbTgsReq.java:270)
at sun.security.krb5.internal.CredentialsUtil.serviceCreds(CredentialsUtil.java:302)
at sun.security.krb5.internal.CredentialsUtil.acquireServiceCreds(CredentialsUtil.java:120){code}
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-29
Reporter: eolivelli @eolivelli
In case of session expiration the ZK becomes unusable and the CacheServer cannot request leadership anymore.
So it can happen that in a cluster there is no cache leader at all
Enrico Olivelli 2016-04-12T15:09:09.000+0200
IMHO the option zk.recoversession=true in server.properties is not useful
Enrico Olivelli 2016-04-12T15:10:49.000+0200
same on setupCluster
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-31
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-50
Reporter: eolivelli @eolivelli
By default we are goping to load configuration from "blazingcache.properties"
use "configfile" property (from querystring or cachemanager properties) to override the location.
set configfile= "empty string" to disable the feature
the file will be loaded from the Classloader requested by the boot and from the Context Classloader (to enable configuration inside WARs)
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-68
Reporter: caio @CaioK
Leave only netty-all and tcnative at 2.0.3
Francesco Caliumi 2017-05-31T17:30:18.000+0200
PR opened
Enrico Olivelli 2017-07-25T12:57:02.000+0200
+1 LGTM
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-38
Reporter: alessandro.luccaroni @aluccaroni
It's better to write a more compact log, like the one that we write on invalidation:
{code}16-05-19-08-02-08 SEVERE May 19, 2016 8:02:08 AM blazingcache.client.CacheClient invalidate
SEVERE: invalidate idc-3896#batchstatus22249, not connected{code}
Maybe something like:
{code}16-05-19-08-02-08 SEVERE May 19, 2016 8:02:08 AM blazingcache.client.CacheClient ensureMaxMemoryLimit
SEVERE: evict idc-3021#n2747 size 54,649 bytes lastAccessDate 2,773,457,343,755,929, not connected{code}
Here a log from a production system:
{code}
16-05-19-08-02-08 SEVERE May 19, 2016 8:02:08 AM blazingcache.client.CacheClient ensureMaxMemoryLimit
SEVERE: evict idc-3021#n2747 size 54,649 bytes lastAccessDate 2,773,457,343,755,929
16-05-19-08-02-08 SEVERE May 19, 2016 8:02:08 AM blazingcache.client.CacheClient$3 replyReceived
SEVERE: error while unregistering entry idc-3021#n2747
java.lang.Exception: NettyChannel{name=10.200.86.81:1025, id=6, socket=null pending 0 msgs} connection is not active
at blazingcache.network.netty.NettyChannel.lambda$sendMessageWithAsyncReply$4(NettyChannel.java:188)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
16-05-19-08-02-08 SEVERE May 19, 2016 8:02:08 AM blazingcache.client.CacheClient ensureMaxMemoryLimit
SEVERE: evict idc-3021#n2748 size 57,364 bytes lastAccessDate 2,773,457,344,180,777
16-05-19-08-02-08 SEVERE May 19, 2016 8:02:08 AM blazingcache.client.CacheClient$3 replyReceived
SEVERE: error while unregistering entry idc-3021#n2748
java.lang.Exception: NettyChannel{name=10.200.86.81:1025, id=6, socket=null pending 0 msgs} connection is not active
at blazingcache.network.netty.NettyChannel.lambda$sendMessageWithAsyncReply$4(NettyChannel.java:188)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745){code}
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-70
Reporter: eolivelli @eolivelli
It seems that PendingFetchesManager never removes entries for successful fetches.
This way at runtime it will contain an entry for each 'fetched' key
Enrico Olivelli 2017-07-25T12:57:17.000+0200
+1 LGTM
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-66
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-32
Reporter: eolivelli @eolivelli
Enrico Olivelli 2016-04-26T14:40:11.000+0200
hotfix 1.7.3
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-28
Reporter: eolivelli @eolivelli
On the serverside it would be better to have debug messages which contain the clientId and not onlyIP addresses/ports
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-70
Reporter: eolivelli @eolivelli
It seems that PendingFetchesManager never removes entries for successful fetches.
This way at runtime it will contain an entry for each 'fetched' key
Enrico Olivelli 2017-07-25T12:57:17.000+0200
+1 LGTM
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-42
Reporter: matteo.casadei @mcRoot
When maxLocalEntryAge option is present, do not perform eviction check continuously, but only every maxLocalEntryAge/2, so that perfomance on the client-side gets improved with possible stale entries not kept more than maxLocalEntryAge seconds.
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-55
Reporter: eolivelli @eolivelli
Provide an official image for Docker
Enrico Olivelli 2016-12-27T16:40:59.000+0100
see https://github.com/docker-library/official-images for instructions
Enrico Olivelli 2016-12-27T16:45:07.000+0100
[~caio] do you want to pick up this issue ?
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-57
Reporter: eolivelli @eolivelli
The idea si to have an option to launch a CacheServer inside of every client in case of JCache.
This will ease the setup o very little clusters (2-3 nodes) in which any client in turn can act as coordinator
Enrico Olivelli 2017-03-14T11:19:17.000+0100
added new value for blazingcache.mode=server
relevant configuration options:
{code:java}
String connect = properties_and_params.getProperty("blazingcache.zookeeper.connectstring", "localhost:1281");
int timeout = Integer.parseInt(properties_and_params.getProperty("blazingcache.zookeeper.sessiontimeout", "40000"));
String path = properties_and_params.getProperty("blazingcache.zookeeper.path", "/blazingcache");
boolean writeacls = Boolean.parseBoolean(properties_and_params.getProperty("blazingcache.zookeeper.writeacls", "false"));
String host = properties_and_params.getProperty("blazingcache.server.host", "");
int port = Integer.parseInt(properties_and_params.getProperty("blazingcache.server.port", "7000"));
boolean ssl = Boolean.parseBoolean(properties_and_params.getProperty("blazingcache.server.ssl", "false"));{code}
Enrico Olivelli 2017-03-14T11:26:17.000+0100
updated the docs at
https://dash.readme.io/legacy/project/blazingcache/v1.0/docs/getting-started
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-26
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-71
Reporter: eolivelli @eolivelli
This improvement will be rellay useful on the server-side.
See apache/bookkeeper@667390d
for a similar implementation on Apache BookKeeper which in turn is taken from Apache ZooKeeper
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-35
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-48
Reporter: eolivelli @eolivelli
The idea is to apply ACLs to zookeeper nodes, the user case is to have at least access restricted to authenticated users, that is the 'auth' built-in scheme
see https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#sc_BuiltinACLSchemes
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-65
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-33
Reporter: eolivelli @eolivelli
Enrico Olivelli 2016-04-27T14:18:36.000+0200
hotfix 1.7.4
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-41
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-54
Reporter: alessandro.luccaroni @aluccaroni
Implement a new page replacement algorithm with improved performance over LRU: LIRS (Low Inter-reference Recency Set)
Maybe we could also evaluate a facility to easily swap between page replacement algorithm on startup (for now only LRU and LIRS)
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-56
Reporter: eolivelli @eolivelli
Introduce a basic Web Interface to monitor at least the cache server:
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-30
Reporter: eolivelli @eolivelli
The changes in BLAZ-17 break production system
Enrico Olivelli 2016-04-21T13:37:31.000+0200
hotfix 1.7.1
Enrico Olivelli 2016-04-21T13:40:27.000+0200
adding system property to rollback, default is false
blazingcache.nettychannel.disconnectonpendingreplytimeout=true
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-62
Reporter: eolivelli @eolivelli
Backport RawString from HerdDB project
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-59
Reporter: eolivelli @eolivelli
Enrico Olivelli 2017-03-14T10:54:36.000+0100
We are going to include this version as it has less problems of SO compatibility (on my Fedora PC I have many troubles because I have a more recent version of OpenSSL for instance)
netty-tcnative-boringssl-static
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-60
Reporter: eolivelli @eolivelli
Enrico Olivelli 2017-03-14T10:00:17.000+0100
it will be enabled only if
{code:java}
private static final boolean ENABLE_EPOLL_NATIVE = System.getProperty("os.name").equalsIgnoreCase("linux")
&& !Boolean.getBoolean("blazingcache.network.disablenativeepoll");{code}
So set system property blazingcaceh.network.disablenativeepoll to true to disable native epool
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-36
Reporter: alessandro.luccaroni @aluccaroni
16-05-19-03-49-35 SEVERE May 19, 2016 3:49:35 AM blazingcache.client.CacheClient ensureMaxMemoryLimit
SEVERE: evict idc-3124#c7 size 4,876 bytes lastAccessDate 2,723,770,251,438,380
Maybe we can lower it to INFO
Enrico Olivelli 2016-06-13T09:12:48.000+0200
changing to FINEST
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-40
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-61
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-47
Reporter: eolivelli @eolivelli
This is the backport of https://dev.majordodo.org/jira/browse/MAJ-69.
JAAS entries are:
BlazingCacheServer and BlazingCacheClient
Enrico Olivelli 2016-10-18T17:24:33.000+0200
Example jass.conf for Kerberos:
{code}
BlazingCacheServer {
com.sun.security.auth.module.Krb5LoginModule required debug=true
useKeyTab=true
keyTab="/....file.keytab"
storeKey=true
useTicketCache=false
principal="blazingcache/[email protected]";
};
BlazingCacheClient {
com.sun.security.auth.module.Krb5LoginModule required debug=true
useKeyTab=true
keyTab="/...file.keytab"
storeKey=true
useTicketCache=false
principal="magnews/[email protected]";
};
{code}
Enrico Olivelli 2016-10-18T17:25:10.000+0200
Example configuratio for MD5
{code}
BlazingCacheServer {
org.apache.zookeeper.server.auth.DigestLoginModule required
user_hd="testpwd";
};
BlazingCacheClient {
org.apache.zookeeper.server.auth.DigestLoginModule required
username="hd"
password="testpwd";
};
{code}
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-67
Reporter: eolivelli @eolivelli
Every tests failed with this error:
Expecting no open client connections. Customizations implementing Closeable need to be closed. See https://github.com/jsr107/jsr107tck/issues/100
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-51
Reporter: eolivelli @eolivelli
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-53
Reporter: nicolo.boschi @nicoloboschi
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-69
Reporter: eolivelli @eolivelli
{code:java}
java.lang.String.valueOf(String.java:2994)
java.lang.StringBuilder.append(StringBuilder.java:131)
java.util.AbstractMap.toString(AbstractMap.java:559)
java.lang.String.valueOf(String.java:2994)
java.lang.StringBuilder.append(StringBuilder.java:131)
blazingcache.network.Message.toString(Message.java:156)
java.lang.String.valueOf(String.java:2994)
java.lang.StringBuilder.append(StringBuilder.java:131)
blazingcache.client.CacheClient.fetch(CacheClient.java:760)
blazingcache.client.CacheClient.fetch(CacheClient.java:715)
blazingcache.client.CacheClient.fetchObject(CacheClient.java:1377)
....
{code}
Enrico Olivelli 2017-06-13T14:29:03.000+0200
I am marking this as "Higher" priority because it impacts on performance under heavy load (huge amount of fetches due to empty cache due to disconnection due to GC problems)
Enrico Olivelli 2017-07-25T12:57:11.000+0200
+1 LGTM
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-39
Reporter: alessandro.luccaroni @aluccaroni
Since all the stats are calculated since the LastReboot we need to add this information to better export and graph these data.
Proposed values:
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-43
Reporter: matteo.casadei @mcRoot
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-45
Reporter: eolivelli @eolivelli
In 1.9.xx we are sending one eviction notification message for every entry to be locally evicted.
This can cause a lot of network traffic, and maybe saturate the TCP connection.
We can batch this notification messages in order to reduce the overhead
Enrico Olivelli 2017-03-14T11:55:04.000+0100
Introduced new client-side parameter evictionBatchSize, which defaults to 100.
I think no one will ever change this value
Enrico Olivelli 2017-03-14T11:55:33.000+0100
The change is fully compatible with legacy pre-1.12 clients
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-34
Reporter: eolivelli @eolivelli
It happened that during a network problem the invalidate exited with a RuntimeException, instead of doing the usually "retry forever" loop.
The cause is that the Channel was "not valid" but still assigned to the cache client.
The retry login handles only "TimeoutException" and not other RuntimeException errors
Enrico Olivelli 2016-05-11T16:19:02.000+0200
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-71
Reporter: eolivelli @eolivelli
This improvement will be rellay useful on the server-side.
See apache/bookkeeper@667390d
for a similar implementation on Apache BookKeeper which in turn is taken from Apache ZooKeeper
JIRA: https://dev.blazingcache.org/jira/browse/BLAZ-46
Reporter: eolivelli @eolivelli
The idea is to let a client cache an entry locally without the need to update all the other peers with the same entry.
In fact if you set fetchPriorty=0 on some client A and client B fetches the entry it results in a cache "miss", this usually leads to a local local of the datum and a subsequent put, which in turn need to notify the client A.
Usually client A will be very "slow", because it has fetchPriority = 0 and so the "put" will be slow too
We can introduce a "load" operation, which loads the datum locally and registers the listener on server
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.