Skip to content

Commit 15d586b

Browse files
committed
fix: AI chat not working when use PostgreSQL as database (OD-2657)
1 parent 584628b commit 15d586b

File tree

7 files changed

+36
-33
lines changed

7 files changed

+36
-33
lines changed

server-core/src/main/java/io/onedev/server/data/migration/DataMigrator.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8442,4 +8442,12 @@ private void migrate217(File dataDir, Stack<Integer> versions) {
84428442
}
84438443
}
84448444

8445+
private void migrate218(File dataDir, Stack<Integer> versions) {
8446+
for (File file : dataDir.listFiles()) {
8447+
if (file.getName().startsWith("Chats.xml") || file.getName().startsWith("ChatMessages.xml")) {
8448+
FileUtils.deleteFile(file);
8449+
}
8450+
}
8451+
}
8452+
84458453
}

server-core/src/main/java/io/onedev/server/model/ChatMessage.java

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package io.onedev.server.model;
22

3-
import java.util.LinkedHashMap;
4-
53
import javax.persistence.Column;
64
import javax.persistence.Entity;
75
import javax.persistence.FetchType;
86
import javax.persistence.Index;
97
import javax.persistence.JoinColumn;
10-
import javax.persistence.Lob;
118
import javax.persistence.ManyToOne;
129
import javax.persistence.Table;
1310

@@ -29,14 +26,9 @@ public class ChatMessage extends AbstractEntity {
2926

3027
private boolean request;
3128

32-
@Lob
3329
@Column(nullable=false, length=MAX_CONTENT_LEN)
3430
private String content;
3531

36-
@Lob
37-
@Column(nullable=false, length=65535)
38-
private LinkedHashMap<String, String> attachments = new LinkedHashMap<>();
39-
4032
public Chat getChat() {
4133
return chat;
4234
}
@@ -69,12 +61,4 @@ public void setContent(String content) {
6961
this.content = StringUtils.abbreviate(content, MAX_CONTENT_LEN);
7062
}
7163

72-
public LinkedHashMap<String, String> getAttachments() {
73-
return attachments;
74-
}
75-
76-
public void setAttachments(LinkedHashMap<String, String> attachments) {
77-
this.attachments = attachments;
78-
}
79-
8064
}

server-core/src/main/java/io/onedev/server/model/User.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -734,11 +734,7 @@ public boolean isSystem() {
734734
public boolean isUnknown() {
735735
return UNKNOWN_ID.equals(getId());
736736
}
737-
738-
public boolean isOrdinary() {
739-
return getId() > 0;
740-
}
741-
737+
742738
public Collection<UserAuthorization> getProjectAuthorizations() {
743739
return projectAuthorizations;
744740
}

server-core/src/main/java/io/onedev/server/notification/CodeCommentNotificationManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public void on(CodeCommentEvent event) {
8585
}
8686

8787
Set<String> emailAddresses = notifyUsers.stream()
88-
.filter(it -> it.isOrdinary()
88+
.filter(it -> it.getId() > 0
8989
&& it.getType() != User.Type.AI
9090
&& (!it.equals(event.getUser()) || it.isNotifyOwnEvents())
9191
&& it.getPrimaryEmailAddress() != null
@@ -118,7 +118,7 @@ public void on(CodeCommentEvent event) {
118118
}
119119

120120
private boolean isAiEntitled(@Nullable User user, CodeComment comment, User ai) {
121-
if (user != null && user.isOrdinary()) {
121+
if (user != null && user.getId() > 0) {
122122
if (user.isEntitledToAi(ai)) {
123123
return true;
124124
} else {

server-core/src/main/java/io/onedev/server/notification/IssueNotificationManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ public void on(IssuesMoved event) {
436436
}
437437

438438
private boolean isAiEntitled(@Nullable User user, Issue issue, User ai) {
439-
if (user != null && user.isOrdinary()) {
439+
if (user != null && user.getId() > 0) {
440440
if (user.isEntitledToAi(ai)) {
441441
return true;
442442
} else {

server-core/src/main/java/io/onedev/server/notification/PullRequestNotificationManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ Review current pull request for major issues (ignore styling/format/documentatio
415415
}
416416

417417
private boolean isAiEntitled(@Nullable User user, PullRequest request, User ai) {
418-
if (user != null && user.isOrdinary()) {
418+
if (user != null && user.getId() > 0) {
419419
if (user.isEntitledToAi(ai)) {
420420
return true;
421421
} else {

server-core/src/main/java/io/onedev/server/web/page/base/base.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -352,27 +352,42 @@ onedev.server = {
352352
pageUnloading = true;
353353
});
354354

355-
var keepAlive;
355+
var keepAliveTimer;
356+
var lastKeepAliveMessageReceived = true;
356357
Wicket.Event.subscribe("/websocket/open", function(jqEvent) {
357358
$(".connection-error").hide();
358-
keepAlive = setInterval(function() {
359-
Wicket.WebSocket.send("KeepAlive");
360-
}, 30000); // 30 seconds to tolerate Nginx default timeout (60 seconds)
359+
keepAliveTimer = setInterval(function() {
360+
if (!lastKeepAliveMessageReceived) {
361+
console.debug(new Date().toLocaleTimeString() + ": Last websocket keep alive message not received");
362+
onConnectionError();
363+
} else {
364+
console.debug(new Date().toLocaleTimeString() + ": Sending websocket keep alive message");
365+
Wicket.WebSocket.send("KeepAlive");
366+
lastKeepAliveMessageReceived = false;
367+
}
368+
}, 30000); // 30 seconds to tolerate Nginx default timeout (60 seconds)
361369
});
362-
Wicket.Event.subscribe("/websocket/closed", function(jqEvent) {
370+
function onConnectionError() {
363371
if (!pageUnloading) {
364372
$("body>.error").hide();
365373
$(".connection-error").show();
366374
}
367-
if (keepAlive) {
368-
clearInterval(keepAlive);
369-
keepAlive = undefined;
375+
if (keepAliveTimer) {
376+
clearInterval(keepAliveTimer);
377+
keepAliveTimer = undefined;
370378
}
379+
}
380+
Wicket.Event.subscribe("/websocket/closed", function(jqEvent) {
381+
console.debug(new Date().toLocaleTimeString() + ": Websocket closed");
382+
onConnectionError();
371383
});
372384
Wicket.Event.subscribe("/websocket/message", function(jqEvent, message) {
373385
if (message == "ErrorMessage") {
374386
$("body>.error").hide();
375387
$(".page-error").show();
388+
} else if (message == "KeepAlive") {
389+
lastKeepAliveMessageReceived = true;
390+
console.debug(new Date().toLocaleTimeString() + ": Received websocket keep alive message");
376391
}
377392
});
378393
},

0 commit comments

Comments
 (0)