Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
K
key_value-server
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
amir.yosef
key_value-server
Commits
1d9fb337
You need to sign in or sign up before continuing.
Commit
1d9fb337
authored
Aug 29, 2024
by
amir.yosef
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Unstable Storage management
parent
5a79f2a4
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
137 additions
and
14 deletions
+137
-14
io_quarkus_caffeine.xml
.idea/libraries/io_quarkus_caffeine.xml
+80
-0
Redis.iml
Redis.iml
+1
-0
Cacheable.java
src/storage/Cacheable.java
+8
-0
CaffeineCachePolicy.java
src/storage/CaffeineCachePolicy.java
+44
-0
LRUCachePolicy.java
src/storage/LRUCachePolicy.java
+1
-1
Storage.java
src/storage/Storage.java
+3
-13
No files found.
.idea/libraries/io_quarkus_caffeine.xml
0 → 100644
View file @
1d9fb337
<component
name=
"libraryTable"
>
<library
name=
"io.quarkus.caffeine"
type=
"repository"
>
<properties
maven-id=
"io.quarkus:quarkus-caffeine:2.16.5.Final"
/>
<CLASSES>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-caffeine/2.16.5.Final/quarkus-caffeine-2.16.5.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-core/2.16.5.Final/quarkus-core-2.16.5.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/enterprise/jakarta.enterprise.cdi-api/2.0.2/jakarta.enterprise.cdi-api-2.0.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/el/jakarta.el-api/3.0.3/jakarta.el-api-3.0.3.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/interceptor/jakarta.interceptor-api/1.2.5/jakarta.interceptor-api-1.2.5.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/ejb/jakarta.ejb-api/3.2.6/jakarta.ejb-api-3.2.6.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/transaction/jakarta.transaction-api/1.3.2/jakarta.transaction-api-1.3.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/inject/jakarta.inject-api/1.0/jakarta.inject-api-1.0.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-ide-launcher/2.16.5.Final/quarkus-ide-launcher-2.16.5.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-development-mode-spi/2.16.5.Final/quarkus-development-mode-spi-2.16.5.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/config/smallrye-config/2.13.3/smallrye-config-2.13.3.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/config/smallrye-config-core/2.13.3/smallrye-config-core-2.13.3.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/eclipse/microprofile/config/microprofile-config-api/2.0.1/microprofile-config-api-2.0.1.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-annotation/1.13.2/smallrye-common-annotation-1.13.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-expression/1.13.2/smallrye-common-expression-1.13.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-function/1.13.2/smallrye-common-function-1.13.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-constraint/1.13.2/smallrye-common-constraint-1.13.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-classloader/1.13.2/smallrye-common-classloader-1.13.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/9.4/asm-9.4.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/config/smallrye-config-common/2.13.3/smallrye-config-common-2.13.3.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.5.0.Final/jboss-logging-3.5.0.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/logmanager/jboss-logmanager-embedded/1.0.11/jboss-logmanager-embedded-1.0.11.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging-annotations/2.2.1.Final/jboss-logging-annotations-2.2.1.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/threads/jboss-threads/3.4.3.Final/jboss-threads-3.4.3.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/slf4j/slf4j-jboss-logmanager/1.2.0.Final/slf4j-jboss-logmanager-1.2.0.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/graalvm/sdk/graal-sdk/22.3.0/graal-sdk-22.3.0.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/wildfly/common/wildfly-common/1.5.4.Final-format-001/wildfly-common-1.5.4.Final-format-001.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-bootstrap-runner/2.16.5.Final/quarkus-bootstrap-runner-2.16.5.Final.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-io/1.13.2/smallrye-common-io-1.13.2.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/github/crac/org-crac/0.1.3/org-crac-0.1.3.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-fs-util/0.0.9/quarkus-fs-util-0.0.9.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/com/github/ben-manes/caffeine/caffeine/3.1.1/caffeine-3.1.1.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.14.0/error_prone_annotations-2.14.0.jar!/"
/>
</CLASSES>
<JAVADOC
/>
<SOURCES>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-caffeine/2.16.5.Final/quarkus-caffeine-2.16.5.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-core/2.16.5.Final/quarkus-core-2.16.5.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/enterprise/jakarta.enterprise.cdi-api/2.0.2/jakarta.enterprise.cdi-api-2.0.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/el/jakarta.el-api/3.0.3/jakarta.el-api-3.0.3-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/interceptor/jakarta.interceptor-api/1.2.5/jakarta.interceptor-api-1.2.5-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/ejb/jakarta.ejb-api/3.2.6/jakarta.ejb-api-3.2.6-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/transaction/jakarta.transaction-api/1.3.2/jakarta.transaction-api-1.3.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/jakarta/inject/jakarta.inject-api/1.0/jakarta.inject-api-1.0-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-ide-launcher/2.16.5.Final/quarkus-ide-launcher-2.16.5.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-development-mode-spi/2.16.5.Final/quarkus-development-mode-spi-2.16.5.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/config/smallrye-config/2.13.3/smallrye-config-2.13.3-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/config/smallrye-config-core/2.13.3/smallrye-config-core-2.13.3-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/eclipse/microprofile/config/microprofile-config-api/2.0.1/microprofile-config-api-2.0.1-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-annotation/1.13.2/smallrye-common-annotation-1.13.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-expression/1.13.2/smallrye-common-expression-1.13.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-function/1.13.2/smallrye-common-function-1.13.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-constraint/1.13.2/smallrye-common-constraint-1.13.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-classloader/1.13.2/smallrye-common-classloader-1.13.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/ow2/asm/asm/9.4/asm-9.4-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/config/smallrye-config-common/2.13.3/smallrye-config-common-2.13.3-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging/3.5.0.Final/jboss-logging-3.5.0.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/logmanager/jboss-logmanager-embedded/1.0.11/jboss-logmanager-embedded-1.0.11-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/logging/jboss-logging-annotations/2.2.1.Final/jboss-logging-annotations-2.2.1.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/threads/jboss-threads/3.4.3.Final/jboss-threads-3.4.3.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/jboss/slf4j/slf4j-jboss-logmanager/1.2.0.Final/slf4j-jboss-logmanager-1.2.0.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/graalvm/sdk/graal-sdk/22.3.0/graal-sdk-22.3.0-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/org/wildfly/common/wildfly-common/1.5.4.Final-format-001/wildfly-common-1.5.4.Final-format-001-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-bootstrap-runner/2.16.5.Final/quarkus-bootstrap-runner-2.16.5.Final-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/smallrye/common/smallrye-common-io/1.13.2/smallrye-common-io-1.13.2-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/github/crac/org-crac/0.1.3/org-crac-0.1.3-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/io/quarkus/quarkus-fs-util/0.0.9/quarkus-fs-util-0.0.9-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/com/github/ben-manes/caffeine/caffeine/3.1.1/caffeine-3.1.1-sources.jar!/"
/>
<root
url=
"jar://$MAVEN_REPOSITORY$/com/google/errorprone/error_prone_annotations/2.14.0/error_prone_annotations-2.14.0-sources.jar!/"
/>
</SOURCES>
</library>
</component>
\ No newline at end of file
Redis.iml
View file @
1d9fb337
...
@@ -27,5 +27,6 @@
...
@@ -27,5 +27,6 @@
</library>
</library>
</orderEntry>
</orderEntry>
<orderEntry
type=
"library"
name=
"io.quarkus.junit5.mockito"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"io.quarkus.junit5.mockito"
level=
"project"
/>
<orderEntry
type=
"library"
name=
"io.quarkus.caffeine"
level=
"project"
/>
</component>
</component>
</module>
</module>
\ No newline at end of file
src/storage/Cacheable.java
0 → 100644
View file @
1d9fb337
package
storage
;
public
interface
Cacheable
<
K
,
V
>
{
void
save
(
K
key
,
V
value
);
void
save
(
K
key
,
V
value
,
Long
expirationTime
);
V
get
(
K
key
);
void
delete
(
K
key
);
}
src/storage/CaffeineCachePolicy.java
0 → 100644
View file @
1d9fb337
package
storage
;
import
com.github.benmanes.caffeine.cache.Cache
;
import
com.github.benmanes.caffeine.cache.Caffeine
;
import
com.github.benmanes.caffeine.cache.RemovalCause
;
import
java.util.concurrent.TimeUnit
;
import
java.util.logging.Logger
;
public
class
CaffeineCachePolicy
<
K
,
V
>
implements
CachePolicy
<
K
,
V
>
{
private
final
Cache
<
K
,
V
>
cache
;
private
static
final
Logger
logger
=
Logger
.
getLogger
(
CaffeineCachePolicy
.
class
.
getName
());
public
CaffeineCachePolicy
(
int
maxCapacity
)
{
this
.
cache
=
Caffeine
.
newBuilder
()
.
maximumSize
(
maxCapacity
)
.
expireAfterAccess
(
60
,
TimeUnit
.
MINUTES
)
.
evictionListener
((
K
key
,
V
value
,
RemovalCause
cause
)
->
logger
.
info
(
"Evicted key: "
+
key
+
", Value: "
+
value
+
", Reason: "
+
cause
))
.
build
();
}
@Override
public
void
add
(
K
key
,
V
value
)
{
cache
.
put
(
key
,
value
);
}
@Override
public
V
retrieve
(
K
key
)
{
return
cache
.
getIfPresent
(
key
);
}
@Override
public
void
delete
(
K
key
)
{
cache
.
invalidate
(
key
);
}
@Override
public
void
runMaintenance
()
{
cache
.
cleanUp
();
}
}
src/storage/LRUCachePolicy.java
View file @
1d9fb337
...
@@ -227,4 +227,4 @@ public class LRUCachePolicy<K, V> implements CachePolicy<K, V> {
...
@@ -227,4 +227,4 @@ public class LRUCachePolicy<K, V> implements CachePolicy<K, V> {
this
.
value
=
value
;
this
.
value
=
value
;
}
}
}
}
}
}
\ No newline at end of file
src/storage/Storage.java
View file @
1d9fb337
...
@@ -2,24 +2,22 @@ package storage;
...
@@ -2,24 +2,22 @@ package storage;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.logging.Logger
;
public
class
Storage
{
public
class
Storage
{
private
final
int
capacity
=
1000000
;
private
final
int
capacity
=
1000000
;
private
static
final
Logger
logger
=
Logger
.
getLogger
(
Storage
.
class
.
getName
());
private
final
CachePolicy
<
String
,
String
>
storage
;
private
final
CachePolicy
<
String
,
String
>
storage
;
private
final
Map
<
String
,
Long
>
timeToExpiration
=
new
ConcurrentHashMap
<>(
capacity
);
private
final
Map
<
String
,
Long
>
timeToExpiration
=
new
ConcurrentHashMap
<>(
capacity
);
private
final
Map
<
String
,
Long
>
currentTimeForKey
=
new
ConcurrentHashMap
<>(
capacity
);
private
final
Map
<
String
,
Long
>
currentTimeForKey
=
new
ConcurrentHashMap
<>(
capacity
);
private
Storage
(
int
threshold
)
{
private
Storage
()
{
this
.
storage
=
new
LRUCachePolicy
<>(
capacity
,
threshold
);
this
.
storage
=
new
CaffeineCachePolicy
<>(
capacity
);
RdbFileReader
<
String
,
String
>
reader
=
new
RdbFileReader
<>();
RdbFileReader
<
String
,
String
>
reader
=
new
RdbFileReader
<>();
Map
<
String
,
Long
>
stringStringMap
=
reader
.
getKeysExpiration
();
Map
<
String
,
Long
>
stringStringMap
=
reader
.
getKeysExpiration
();
this
.
timeToExpiration
.
putAll
(
stringStringMap
);
this
.
timeToExpiration
.
putAll
(
stringStringMap
);
}
}
private
static
final
class
StorageHolder
{
private
static
final
class
StorageHolder
{
private
static
final
Storage
instance
=
new
Storage
(
800000
);
private
static
final
Storage
instance
=
new
Storage
();
}
}
public
static
Storage
getInstance
()
{
public
static
Storage
getInstance
()
{
...
@@ -45,14 +43,6 @@ public class Storage {
...
@@ -45,14 +43,6 @@ public class Storage {
}
}
private
boolean
isExpired
(
String
key
)
{
private
boolean
isExpired
(
String
key
)
{
if
(
timeToExpiration
.
containsKey
(
key
)
&&
!
currentTimeForKey
.
containsKey
(
key
))
{
long
currentTime
=
System
.
currentTimeMillis
();
long
expirationTime
=
timeToExpiration
.
get
(
key
);
if
(
currentTime
>
expirationTime
)
{
logger
.
info
(
"Key expired: "
+
key
);
return
true
;
}
}
if
(
currentTimeForKey
.
containsKey
(
key
))
{
if
(
currentTimeForKey
.
containsKey
(
key
))
{
long
currTime
=
System
.
currentTimeMillis
();
long
currTime
=
System
.
currentTimeMillis
();
long
expirationTime
=
timeToExpiration
.
get
(
key
);
long
expirationTime
=
timeToExpiration
.
get
(
key
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment