Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
spring-boot-starter-dsp
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
shenjiaqing
spring-boot-starter-dsp
Commits
c1a8c1bf
Commit
c1a8c1bf
authored
May 19, 2022
by
shenjiaqing
Committed by
wangwei
May 19, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改算法模型
parent
2fe82b29
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
265 additions
and
21 deletions
+265
-21
build.gradle
build.gradle
+2
-2
AlgoTFModel.java
...uiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java
+12
-9
AlgoTFModelFactory.java
...ng/boot/starter/dsp/model/service/AlgoTFModelFactory.java
+2
-2
AlgoTFModelProxy.java
...ring/boot/starter/dsp/model/service/AlgoTFModelProxy.java
+2
-2
AlgoTFModelFactoryImpl.java
...tarter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java
+3
-2
AlgoTFModelProxyImpl.java
.../starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java
+4
-4
修改算法模型.patch
修改算法模型.patch
+240
-0
No files found.
build.gradle
View file @
c1a8c1bf
...
...
@@ -38,7 +38,7 @@ allprojects {
}
group
=
"cn.com.duiba.boot"
version
=
"0.0.4
3
"
version
=
"0.0.4
4
"
}
subprojects
{
...
...
@@ -81,7 +81,7 @@ subprojects {
dependency
(
'org.projectlombok:lombok:1.18.12'
)
//升级算法版本
dependency
(
"cn.com.duiba.nezha-alg:alg-model:2.2
3.43
"
)
dependency
(
"cn.com.duiba.nezha-alg:alg-model:2.2
8.7
"
)
dependency
(
'io.github.openfeign:feign-httpclient:10.10.1.dbfixed'
)
//log4j fix
...
...
spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java
View file @
c1a8c1bf
package
cn
.
com
.
duiba
.
spring
.
boot
.
starter
.
dsp
.
model
.
model
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
V2
;
import
cn.com.duiba.spring.boot.starter.dsp.model.enums.AlgoTFModelStatusEnum
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.Objects
;
@Slf4j
...
...
@@ -13,7 +14,7 @@ public class AlgoTFModel {
private
final
static
Long
CLOSE_TF_MODEL_TIME
=
120000L
;
// tf模型
private
LocalTFModel
localTFModel
;
private
LocalTFModel
V2
localTFModel
;
// 最后一次访问的时间
private
Long
lastAccessTime
;
...
...
@@ -26,19 +27,19 @@ public class AlgoTFModel {
private
String
name
;
public
AlgoTFModel
(
int
status
,
String
name
){
public
AlgoTFModel
(
int
status
,
String
name
)
{
this
.
status
=
status
;
this
.
name
=
name
;
}
public
AlgoTFModel
(
LocalTFModel
localTFModel
,
int
status
,
String
name
)
{
public
AlgoTFModel
(
LocalTFModel
V2
localTFModel
,
int
status
,
String
name
)
{
this
.
localTFModel
=
localTFModel
;
this
.
status
=
status
;
this
.
loadTime
=
System
.
currentTimeMillis
();
this
.
name
=
name
;
}
public
LocalTFModel
getLocalTFModel
()
{
public
LocalTFModel
V2
getLocalTFModel
()
{
this
.
lastAccessTime
=
System
.
currentTimeMillis
();
//CatTools.metricForCount("获取tf模型, name:" + name);
return
localTFModel
;
...
...
@@ -46,6 +47,7 @@ public class AlgoTFModel {
/**
* 判断当前tf模型是否为running状态
*
* @return boolean
*/
public
boolean
isRunning
()
{
...
...
@@ -54,6 +56,7 @@ public class AlgoTFModel {
/**
* 判断当前tf模型是否可以关闭
*
* @return
*/
public
boolean
isAllowClose
()
{
...
...
@@ -74,17 +77,17 @@ public class AlgoTFModel {
loadTime
=
null
;
}
public
boolean
isLatestVersion
(
LocalTFModel
localTFModel
,
String
tfKey
)
{
public
boolean
isLatestVersion
(
LocalTFModel
V2
localTFModel
,
String
tfKey
)
{
try
{
Lo
ng
lastVersion
=
localTFModel
.
getLastVersion
(
tfKey
);
return
!
Objects
.
equals
(
String
.
valueOf
(
lastVersion
)
,
this
.
localTFModel
.
getVersion
());
Stri
ng
lastVersion
=
localTFModel
.
getLastVersion
(
tfKey
);
return
!
Objects
.
equals
(
lastVersion
,
this
.
localTFModel
.
getVersion
());
}
catch
(
Exception
e
)
{
log
.
warn
(
"AlgoTFModel getLastVersion error"
,
e
);
}
return
false
;
}
public
void
loadTFModel
(
LocalTFModel
localTFModel
,
String
tfKey
)
{
public
void
loadTFModel
(
LocalTFModel
V2
localTFModel
,
String
tfKey
)
{
try
{
localTFModel
.
loadModel
(
tfKey
);
log
.
info
(
"加载tf模型, name:{}"
,
name
);
...
...
spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelFactory.java
View file @
c1a8c1bf
package
cn
.
com
.
duiba
.
spring
.
boot
.
starter
.
dsp
.
model
.
service
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
V2
;
public
interface
AlgoTFModelFactory
{
...
...
@@ -9,6 +9,6 @@ public interface AlgoTFModelFactory {
* @param tfKey
* @return
*/
LocalTFModel
getTFModel
(
String
tfKey
);
LocalTFModel
V2
getTFModel
(
String
tfKey
);
}
spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelProxy.java
View file @
c1a8c1bf
package
cn
.
com
.
duiba
.
spring
.
boot
.
starter
.
dsp
.
model
.
service
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
V2
;
public
interface
AlgoTFModelProxy
{
...
...
@@ -8,7 +8,7 @@ public interface AlgoTFModelProxy {
* 获取tf模型
* @return LocalTFModel
*/
LocalTFModel
chooseTFModel
();
LocalTFModel
V2
chooseTFModel
();
/**
* 关闭tf模型
...
...
spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java
View file @
c1a8c1bf
package
cn
.
com
.
duiba
.
spring
.
boot
.
starter
.
dsp
.
model
.
service
.
impl
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
V2
;
import
cn.com.duiba.spring.boot.starter.dsp.model.service.AlgoTFModelFactory
;
import
cn.com.duiba.spring.boot.starter.dsp.model.service.AlgoTFModelProxy
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections.MapUtils
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.atomic.AtomicInteger
;
...
...
@@ -21,7 +22,7 @@ public class AlgoTFModelFactoryImpl implements AlgoTFModelFactory {
private
final
Map
<
String
,
AlgoTFModelProxy
>
proxyMap
=
new
ConcurrentHashMap
<>();
@Override
public
LocalTFModel
getTFModel
(
String
tfKey
)
{
public
LocalTFModel
V2
getTFModel
(
String
tfKey
)
{
if
(
proxyMap
.
containsKey
(
tfKey
))
{
AlgoTFModelProxy
algoTFModelProxy
=
proxyMap
.
get
(
tfKey
);
...
...
spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java
View file @
c1a8c1bf
package
cn
.
com
.
duiba
.
spring
.
boot
.
starter
.
dsp
.
model
.
service
.
impl
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
;
import
cn.com.duiba.nezha.alg.model.tf.LocalTFModel
V2
;
import
cn.com.duiba.spring.boot.starter.dsp.model.enums.AlgoTFModelStatusEnum
;
import
cn.com.duiba.spring.boot.starter.dsp.model.model.AlgoTFModel
;
import
cn.com.duiba.spring.boot.starter.dsp.model.service.AlgoTFModelProxy
;
...
...
@@ -27,7 +27,7 @@ public class AlgoTFModelProxyImpl implements AlgoTFModelProxy {
AlgoTFModelProxyImpl
(
String
tfKey
)
throws
Exception
{
this
.
tfKey
=
tfKey
;
LocalTFModel
localTFModel
=
new
LocalTFModel
();
LocalTFModel
V2
localTFModel
=
new
LocalTFModelV2
();
try
{
localTFModel
.
loadModel
(
tfKey
);
}
catch
(
Exception
e
)
{
...
...
@@ -41,7 +41,7 @@ public class AlgoTFModelProxyImpl implements AlgoTFModelProxy {
}
@Override
public
LocalTFModel
chooseTFModel
()
{
public
LocalTFModel
V2
chooseTFModel
()
{
// case1
if
(!
algoTFModel1
.
isRunning
()
&&
!
algoTFModel2
.
isRunning
())
{
return
null
;
...
...
@@ -106,7 +106,7 @@ public class AlgoTFModelProxyImpl implements AlgoTFModelProxy {
}
// case2:模型1正在运行,模型2停止运行
// 则立刻加载新模型到模型2上
LocalTFModel
localTFModel
=
new
LocalTFModel
();
LocalTFModel
V2
localTFModel
=
new
LocalTFModelV2
();
if
(
algoTFModel1
.
isRunning
()
&&
!
algoTFModel2
.
isRunning
()
&&
algoTFModel1
.
isLatestVersion
(
localTFModel
,
tfKey
))
{
algoTFModel2
.
loadTFModel
(
localTFModel
,
tfKey
);
tfModelUpdateTime
=
System
.
currentTimeMillis
();
...
...
修改算法模型.patch
0 → 100644
View file @
c1a8c1bf
Index: build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/build.gradle b/build.gradle
--- a/build.gradle (revision db5654b13ba65341751bbf6816ad7d16697c7e70)
+++ b/build.gradle (revision ecf64b861e6ad001a83e661f03f6c9d66e91e5dc)
@@ -38,7 +38,7 @@
}
group = "cn.com.duiba.boot"
- version = "0.0.37"
+ version = "0.0.38-SNAPSHOT"
}
subprojects {
@@ -81,7 +81,7 @@
dependency('org.projectlombok:lombok:1.18.12')
//升级算法版本
- dependency("cn.com.duiba.nezha-alg:alg-model:2.23.43")
+ dependency("cn.com.duiba.nezha-alg:alg-model:2.28.6-SNAPSHOT")
dependency('io.github.openfeign:feign-httpclient:10.10.1.dbfixed')
//log4j fix
Index: spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java
--- a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java (revision db5654b13ba65341751bbf6816ad7d16697c7e70)
+++ b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/model/AlgoTFModel.java (revision ecf64b861e6ad001a83e661f03f6c9d66e91e5dc)
@@ -1,9 +1,10 @@
package cn.com.duiba.spring.boot.starter.dsp.model.model;
-import cn.com.duiba.nezha.alg.model.tf.LocalTFModel;
+import cn.com.duiba.nezha.alg.model.tf.LocalTFModelV2;
import cn.com.duiba.spring.boot.starter.dsp.model.enums.AlgoTFModelStatusEnum;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+
import java.util.Objects;
@Slf4j
@@ -13,7 +14,7 @@
private final static Long CLOSE_TF_MODEL_TIME = 120000L;
// tf模型
- private LocalTFModel localTFModel;
+ private LocalTFModelV2 localTFModel;
// 最后一次访问的时间
private Long lastAccessTime;
@@ -26,19 +27,19 @@
private String name;
- public AlgoTFModel(int status, String name){
+ public AlgoTFModel(int status, String name) {
this.status = status;
this.name = name;
}
- public AlgoTFModel(LocalTFModel localTFModel, int status, String name){
+ public AlgoTFModel(LocalTFModelV2 localTFModel, int status, String name) {
this.localTFModel = localTFModel;
this.status = status;
this.loadTime = System.currentTimeMillis();
this.name = name;
}
- public LocalTFModel getLocalTFModel(){
+ public LocalTFModelV2 getLocalTFModel() {
this.lastAccessTime = System.currentTimeMillis();
//CatTools.metricForCount("获取tf模型, name:" + name);
return localTFModel;
@@ -46,6 +47,7 @@
/**
* 判断当前tf模型是否为running状态
+ *
* @return boolean
*/
public boolean isRunning() {
@@ -54,6 +56,7 @@
/**
* 判断当前tf模型是否可以关闭
+ *
* @return
*/
public boolean isAllowClose() {
@@ -74,17 +77,17 @@
loadTime = null;
}
- public boolean isLatestVersion(LocalTFModel localTFModel, String tfKey) {
+ public boolean isLatestVersion(LocalTFModelV2 localTFModel, String tfKey) {
try {
- Long lastVersion = localTFModel.getLastVersion(tfKey);
- return !Objects.equals(String.valueOf(lastVersion), this.localTFModel.getVersion());
+ String lastVersion = localTFModel.getLastVersion(tfKey);
+ return !Objects.equals(lastVersion, this.localTFModel.getVersion());
} catch (Exception e) {
log.warn("AlgoTFModel getLastVersion error", e);
}
return false;
}
- public void loadTFModel(LocalTFModel localTFModel, String tfKey) {
+ public void loadTFModel(LocalTFModelV2 localTFModel, String tfKey) {
try {
localTFModel.loadModel(tfKey);
log.info("加载tf模型, name:{}", name);
Index: spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelFactory.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelFactory.java b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelFactory.java
--- a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelFactory.java (revision db5654b13ba65341751bbf6816ad7d16697c7e70)
+++ b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelFactory.java (revision ecf64b861e6ad001a83e661f03f6c9d66e91e5dc)
@@ -1,6 +1,6 @@
package cn.com.duiba.spring.boot.starter.dsp.model.service;
-import cn.com.duiba.nezha.alg.model.tf.LocalTFModel;
+import cn.com.duiba.nezha.alg.model.tf.LocalTFModelV2;
public interface AlgoTFModelFactory {
@@ -9,6 +9,6 @@
* @param tfKey
* @return
*/
- LocalTFModel getTFModel(String tfKey);
+ LocalTFModelV2 getTFModel(String tfKey);
}
Index: spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelProxy.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelProxy.java b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelProxy.java
--- a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelProxy.java (revision db5654b13ba65341751bbf6816ad7d16697c7e70)
+++ b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/AlgoTFModelProxy.java (revision ecf64b861e6ad001a83e661f03f6c9d66e91e5dc)
@@ -1,6 +1,6 @@
package cn.com.duiba.spring.boot.starter.dsp.model.service;
-import cn.com.duiba.nezha.alg.model.tf.LocalTFModel;
+import cn.com.duiba.nezha.alg.model.tf.LocalTFModelV2;
public interface AlgoTFModelProxy {
@@ -8,7 +8,7 @@
* 获取tf模型
* @return LocalTFModel
*/
- LocalTFModel chooseTFModel();
+ LocalTFModelV2 chooseTFModel();
/**
* 关闭tf模型
Index: spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java
--- a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java (revision db5654b13ba65341751bbf6816ad7d16697c7e70)
+++ b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelFactoryImpl.java (revision ecf64b861e6ad001a83e661f03f6c9d66e91e5dc)
@@ -1,12 +1,13 @@
package cn.com.duiba.spring.boot.starter.dsp.model.service.impl;
-import cn.com.duiba.nezha.alg.model.tf.LocalTFModel;
+import cn.com.duiba.nezha.alg.model.tf.LocalTFModelV2;
import cn.com.duiba.spring.boot.starter.dsp.model.service.AlgoTFModelFactory;
import cn.com.duiba.spring.boot.starter.dsp.model.service.AlgoTFModelProxy;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
+
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
@@ -21,7 +22,7 @@
private final Map<String, AlgoTFModelProxy> proxyMap = new ConcurrentHashMap<>();
@Override
- public LocalTFModel getTFModel(String tfKey) {
+ public LocalTFModelV2 getTFModel(String tfKey) {
if (proxyMap.containsKey(tfKey)) {
AlgoTFModelProxy algoTFModelProxy = proxyMap.get(tfKey);
Index: spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java
--- a/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java (revision db5654b13ba65341751bbf6816ad7d16697c7e70)
+++ b/spring-boot-starter-dsp-model/src/main/java/cn/com/duiba/spring/boot/starter/dsp/model/service/impl/AlgoTFModelProxyImpl.java (revision ecf64b861e6ad001a83e661f03f6c9d66e91e5dc)
@@ -1,6 +1,6 @@
package cn.com.duiba.spring.boot.starter.dsp.model.service.impl;
-import cn.com.duiba.nezha.alg.model.tf.LocalTFModel;
+import cn.com.duiba.nezha.alg.model.tf.LocalTFModelV2;
import cn.com.duiba.spring.boot.starter.dsp.model.enums.AlgoTFModelStatusEnum;
import cn.com.duiba.spring.boot.starter.dsp.model.model.AlgoTFModel;
import cn.com.duiba.spring.boot.starter.dsp.model.service.AlgoTFModelProxy;
@@ -27,7 +27,7 @@
AlgoTFModelProxyImpl(String tfKey) throws Exception {
this.tfKey = tfKey;
- LocalTFModel localTFModel = new LocalTFModel();
+ LocalTFModelV2 localTFModel = new LocalTFModelV2();
try {
localTFModel.loadModel(tfKey);
} catch (Exception e) {
@@ -41,7 +41,7 @@
}
@Override
- public LocalTFModel chooseTFModel() {
+ public LocalTFModelV2 chooseTFModel() {
// case1
if (!algoTFModel1.isRunning() && !algoTFModel2.isRunning()) {
return null;
@@ -106,7 +106,7 @@
}
// case2:模型1正在运行,模型2停止运行
// 则立刻加载新模型到模型2上
- LocalTFModel localTFModel = new LocalTFModel();
+ LocalTFModelV2 localTFModel = new LocalTFModelV2();
if (algoTFModel1.isRunning() && !algoTFModel2.isRunning() && algoTFModel1.isLatestVersion(localTFModel, tfKey)) {
algoTFModel2.loadTFModel(localTFModel, tfKey);
tfModelUpdateTime = System.currentTimeMillis();
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