Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 0fa83b2

Browse files
feat: prioritize gpus (#1768)
* feat: prioritize GPUs * fix: migrate db * fix: add priority * fix: db * fix: more * fix: migration --------- Co-authored-by: vansangpfiev <sang@jan.ai>
1 parent 6300732 commit 0fa83b2

File tree

8 files changed

+331
-65
lines changed

8 files changed

+331
-65
lines changed

engine/controllers/hardware.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void Hardware::Activate(
3838
ahc.gpus.push_back(g.asInt());
3939
}
4040
}
41-
std::sort(ahc.gpus.begin(), ahc.gpus.end());
41+
4242
if (!hw_svc_->IsValidConfig(ahc)) {
4343
Json::Value ret;
4444
ret["message"] = "Invalid GPU index provided.";

engine/database/hardware.cc

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,23 @@
55

66
namespace cortex::db {
77

8-
Hardwares::Hardwares() : db_(cortex::db::Database::GetInstance().db()) {}
8+
Hardware::Hardware() : db_(cortex::db::Database::GetInstance().db()) {}
99

10-
Hardwares::Hardwares(SQLite::Database& db) : db_(db) {}
10+
Hardware::Hardware(SQLite::Database& db) : db_(db) {}
1111

12-
Hardwares::~Hardwares() {}
12+
13+
Hardware::~Hardware() {}
1314

1415
cpp::result<std::vector<HardwareEntry>, std::string>
15-
Hardwares::LoadHardwareList() const {
16+
Hardware::LoadHardwareList() const {
1617
try {
1718
db_.exec("BEGIN TRANSACTION;");
1819
cortex::utils::ScopeExit se([this] { db_.exec("COMMIT;"); });
1920
std::vector<HardwareEntry> entries;
2021
SQLite::Statement query(
2122
db_,
2223
"SELECT uuid, type, "
23-
"hardware_id, software_id, activated FROM hardware");
24+
"hardware_id, software_id, activated, priority FROM hardware");
2425

2526
while (query.executeStep()) {
2627
HardwareEntry entry;
@@ -29,6 +30,7 @@ Hardwares::LoadHardwareList() const {
2930
entry.hardware_id = query.getColumn(2).getInt();
3031
entry.software_id = query.getColumn(3).getInt();
3132
entry.activated = query.getColumn(4).getInt();
33+
entry.priority = query.getColumn(5).getInt();
3234
entries.push_back(entry);
3335
}
3436
return entries;
@@ -37,19 +39,20 @@ Hardwares::LoadHardwareList() const {
3739
return cpp::fail(e.what());
3840
}
3941
}
40-
cpp::result<bool, std::string> Hardwares::AddHardwareEntry(
42+
cpp::result<bool, std::string> Hardware::AddHardwareEntry(
4143
const HardwareEntry& new_entry) {
4244
try {
4345
SQLite::Statement insert(
4446
db_,
4547
"INSERT INTO hardware (uuid, type, "
46-
"hardware_id, software_id, activated) VALUES (?, ?, "
47-
"?, ?, ?)");
48+
"hardware_id, software_id, activated, priority) VALUES (?, ?, "
49+
"?, ?, ?, ?)");
4850
insert.bind(1, new_entry.uuid);
4951
insert.bind(2, new_entry.type);
5052
insert.bind(3, new_entry.hardware_id);
5153
insert.bind(4, new_entry.software_id);
5254
insert.bind(5, new_entry.activated);
55+
insert.bind(6, new_entry.priority);
5356
insert.exec();
5457
CTL_INF("Inserted: " << new_entry.ToJsonString());
5558
return true;
@@ -58,17 +61,19 @@ cpp::result<bool, std::string> Hardwares::AddHardwareEntry(
5861
return cpp::fail(e.what());
5962
}
6063
}
61-
cpp::result<bool, std::string> Hardwares::UpdateHardwareEntry(
64+
cpp::result<bool, std::string> Hardware::UpdateHardwareEntry(
6265
const std::string& id, const HardwareEntry& updated_entry) {
6366
try {
64-
SQLite::Statement upd(db_,
65-
"UPDATE hardware "
66-
"SET hardware_id = ?, software_id = ?, activated = ? "
67-
"WHERE uuid = ?");
67+
SQLite::Statement upd(
68+
db_,
69+
"UPDATE hardware "
70+
"SET hardware_id = ?, software_id = ?, activated = ?, priority = ? "
71+
"WHERE uuid = ?");
6872
upd.bind(1, updated_entry.hardware_id);
6973
upd.bind(2, updated_entry.software_id);
7074
upd.bind(3, updated_entry.activated);
71-
upd.bind(4, id);
75+
upd.bind(4, updated_entry.priority);
76+
upd.bind(5, id);
7277
if (upd.exec() == 1) {
7378
CTL_INF("Updated: " << updated_entry.ToJsonString());
7479
return true;
@@ -79,7 +84,7 @@ cpp::result<bool, std::string> Hardwares::UpdateHardwareEntry(
7984
}
8085
}
8186

82-
cpp::result<bool, std::string> Hardwares::DeleteHardwareEntry(
87+
cpp::result<bool, std::string> Hardware::DeleteHardwareEntry(
8388
const std::string& id) {
8489
try {
8590
SQLite::Statement del(db_, "DELETE from hardware WHERE uuid = ?");

engine/database/hardware.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
#include <trantor/utils/Logger.h>
55
#include <string>
66
#include <vector>
7-
#include "utils/result.hpp"
87
#include "utils/json_helper.h"
8+
#include "utils/result.hpp"
99

1010
namespace cortex::db {
1111
struct HardwareEntry {
@@ -14,33 +14,34 @@ struct HardwareEntry {
1414
int hardware_id;
1515
int software_id;
1616
bool activated;
17+
int priority;
1718
std::string ToJsonString() const {
1819
Json::Value root;
1920
root["uuid"] = uuid;
2021
root["type"] = type;
2122
root["hardware_id"] = hardware_id;
2223
root["software_id"] = software_id;
2324
root["activated"] = activated;
25+
root["priority"] = priority;
2426
return json_helper::DumpJsonString(root);
2527
}
2628
};
2729

28-
class Hardwares {
30+
class Hardware {
2931

3032
private:
3133
SQLite::Database& db_;
3234

33-
3435
public:
35-
Hardwares();
36-
Hardwares(SQLite::Database& db);
37-
~Hardwares();
36+
Hardware();
37+
Hardware(SQLite::Database& db);
38+
~Hardware();
3839

3940
cpp::result<std::vector<HardwareEntry>, std::string> LoadHardwareList() const;
40-
cpp::result<bool, std::string> AddHardwareEntry(const HardwareEntry& new_entry);
41+
cpp::result<bool, std::string> AddHardwareEntry(
42+
const HardwareEntry& new_entry);
4143
cpp::result<bool, std::string> UpdateHardwareEntry(
4244
const std::string& id, const HardwareEntry& updated_entry);
43-
cpp::result<bool, std::string> DeleteHardwareEntry(
44-
const std::string& id);
45+
cpp::result<bool, std::string> DeleteHardwareEntry(const std::string& id);
4546
};
4647
} // namespace cortex::db

engine/migrations/db_helper.h

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@
44
namespace cortex::mgr {
55
#include <iostream>
66
#include <stdexcept>
7-
#include <vector>
87
#include <string>
8+
#include <vector>
99

10-
inline bool ColumnExists(SQLite::Database& db, const std::string& table_name, const std::string& column_name) {
11-
try {
12-
SQLite::Statement query(db, "SELECT " + column_name + " FROM " + table_name + " LIMIT 0");
13-
return true;
14-
} catch (std::exception&) {
15-
return false;
16-
}
10+
inline bool ColumnExists(SQLite::Database& db, const std::string& table_name,
11+
const std::string& column_name) {
12+
try {
13+
SQLite::Statement query(
14+
db, "SELECT " + column_name + " FROM " + table_name + " LIMIT 0");
15+
return true;
16+
} catch (std::exception&) {
17+
return false;
18+
}
1719
}
1820

19-
inline void AddColumnIfNotExists(SQLite::Database& db, const std::string& table_name,
20-
const std::string& column_name, const std::string& column_type) {
21-
if (!ColumnExists(db, table_name, column_name)) {
22-
std::string sql = "ALTER TABLE " + table_name + " ADD COLUMN " + column_name + " " + column_type;
23-
db.exec(sql);
24-
}
21+
inline void AddColumnIfNotExists(SQLite::Database& db,
22+
const std::string& table_name,
23+
const std::string& column_name,
24+
const std::string& column_type) {
25+
if (!ColumnExists(db, table_name, column_name)) {
26+
std::string sql = "ALTER TABLE " + table_name + " ADD COLUMN " +
27+
column_name + " " + column_type;
28+
db.exec(sql);
29+
}
2530
}
26-
}
31+
} // namespace cortex::mgr

engine/migrations/migration_manager.cc

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "utils/widechar_conv.h"
88
#include "v0/migration.h"
99
#include "v1/migration.h"
10-
10+
#include "v2/migration.h"
1111
namespace cortex::migr {
1212

1313
namespace {
@@ -141,9 +141,11 @@ cpp::result<bool, std::string> MigrationManager::DoUpFolderStructure(
141141
switch (version) {
142142
case 0:
143143
return v0::MigrateFolderStructureUp();
144-
break;
145144
case 1:
146145
return v1::MigrateFolderStructureUp();
146+
case 2:
147+
return v2::MigrateFolderStructureUp();
148+
147149
break;
148150

149151
default:
@@ -155,9 +157,10 @@ cpp::result<bool, std::string> MigrationManager::DoDownFolderStructure(
155157
switch (version) {
156158
case 0:
157159
return v0::MigrateFolderStructureDown();
158-
break;
159160
case 1:
160161
return v1::MigrateFolderStructureDown();
162+
case 2:
163+
return v2::MigrateFolderStructureDown();
161164
break;
162165

163166
default:
@@ -191,9 +194,10 @@ cpp::result<bool, std::string> MigrationManager::DoUpDB(int version) {
191194
switch (version) {
192195
case 0:
193196
return v0::MigrateDBUp(db_);
194-
break;
195197
case 1:
196198
return v1::MigrateDBUp(db_);
199+
case 2:
200+
return v2::MigrateDBUp(db_);
197201
break;
198202

199203
default:
@@ -205,9 +209,10 @@ cpp::result<bool, std::string> MigrationManager::DoDownDB(int version) {
205209
switch (version) {
206210
case 0:
207211
return v0::MigrateDBDown(db_);
208-
break;
209212
case 1:
210213
return v1::MigrateDBDown(db_);
214+
case 2:
215+
return v2::MigrateDBDown(db_);
211216
break;
212217

213218
default:

engine/migrations/schema_version.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#pragma once
22

33
//Track the current schema version
4-
#define SCHEMA_VERSION 1
4+
#define SCHEMA_VERSION 2
5+

0 commit comments

Comments
 (0)