You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-12-17 01:02:23 +03:00
Finished first cut of CRP & PosixTasks. No way it builds yet.
This commit is contained in:
@@ -106,7 +106,7 @@ enum Opcodes {
|
|||||||
TRUNCATE
|
TRUNCATE
|
||||||
--------
|
--------
|
||||||
command format:
|
command format:
|
||||||
1-byte opcode|4-byte filename length|filename|off64_t length
|
1-byte opcode|off64_t length|4-byte filename length|filename
|
||||||
|
|
||||||
response format:
|
response format:
|
||||||
|
|
||||||
|
|||||||
@@ -59,9 +59,9 @@ bool ListDirectoryTask::writeString(uint8_t buf, int *offset, int size, const st
|
|||||||
void ListDirectoryTask::run()
|
void ListDirectoryTask::run()
|
||||||
{
|
{
|
||||||
bool success;
|
bool success;
|
||||||
uint8_t buf[1024];
|
uint8_t buf[1024] = {0};
|
||||||
|
|
||||||
if (getLength() > 1024) {
|
if (getLength() > 1023) {
|
||||||
handleError("ListDirectoryTask read", ENAMETOOLONG);
|
handleError("ListDirectoryTask read", ENAMETOOLONG);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ void ListDirectoryTask::run()
|
|||||||
cmd_overlay *cmd = (cmd_overlay *) buf;
|
cmd_overlay *cmd = (cmd_overlay *) buf;
|
||||||
|
|
||||||
vector<string> listing;
|
vector<string> listing;
|
||||||
// IOC->listDirectory(path, &listing)
|
// IOC->listDirectory(cmd->path, &listing)
|
||||||
|
|
||||||
// bogus response
|
// bogus response
|
||||||
listing.push_back("dummy1");
|
listing.push_back("dummy1");
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ class ListDirectoryTask : public PosixTask
|
|||||||
private:
|
private:
|
||||||
ListDirectoryTask();
|
ListDirectoryTask();
|
||||||
|
|
||||||
void writeString(uint8_t buf, int *offset, int size, const std::string &str)
|
void writeString(uint8_t buf, int *offset, int size, const std::string &str);
|
||||||
struct cmd_overlay {
|
struct cmd_overlay {
|
||||||
uint flen;
|
uint plen;
|
||||||
char path[];
|
char path[];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
#include "PingTask.h"
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
PingTask::PingTask(int sock, uint len) : PosixTask(sock, len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
PingTask::~PingTask()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PingTask::run()
|
||||||
|
{
|
||||||
|
// not much to check on for Milestone 1
|
||||||
|
uint32_t buf[3] = { SM_MSG_START, 4, 0 }; // generic success response
|
||||||
|
write((uint8_t *) buf, 12);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#ifndef PINGTASK_H_
|
||||||
|
#define PINGTASK_H_
|
||||||
|
|
||||||
|
#include "PosixTask.h"
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
class PingTask : PosixTask
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
PingTask(int sock, uint length);
|
||||||
|
virtual ~PingTask();
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
private:
|
||||||
|
PingTask();
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ PosixTask::PosixTask(int _sock, uint _length) :
|
|||||||
|
|
||||||
PosixTask::~PosixTask()
|
PosixTask::~PosixTask()
|
||||||
{
|
{
|
||||||
|
comsumeMsg();
|
||||||
if (!socketReturned)
|
if (!socketReturned)
|
||||||
returnSocket();
|
returnSocket();
|
||||||
}
|
}
|
||||||
@@ -60,11 +61,15 @@ uint PosixTask::getLength()
|
|||||||
return totalLength;
|
return totalLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo, need this to return an int instead of a bool b/c it modifies the length of the read
|
||||||
bool PosixTask::read(uint8_t *buf, uint length)
|
bool PosixTask::read(uint8_t *buf, uint length)
|
||||||
{
|
{
|
||||||
if (length > remainingLengthForCaller)
|
if (length > remainingLengthForCaller)
|
||||||
length = remainingLengthForCaller;
|
length = remainingLengthForCaller;
|
||||||
|
|
||||||
|
if (length == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
uint count = 0;
|
uint count = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -156,4 +161,24 @@ bool PosixTask::write(const vector<uint8_t> &buf)
|
|||||||
return write(&buf[0], buf.size());
|
return write(&buf[0], buf.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PosixTask::consumeMsg()
|
||||||
|
{
|
||||||
|
uint8_t buf[1024];
|
||||||
|
int err;
|
||||||
|
|
||||||
|
bufferLen = 0;
|
||||||
|
bufferPos = 0;
|
||||||
|
remainingLengthForCaller = 0;
|
||||||
|
|
||||||
|
while (remainingLengthInStream > 0)
|
||||||
|
{
|
||||||
|
err = ::read(sock, buf, min(remainingLengthInStream, 1024));
|
||||||
|
if (err <= 0) {
|
||||||
|
remainingLengthInStream = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
remainingLengthInStream -= err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ class PosixTask
|
|||||||
int read(uint8_t *buf, uint length);
|
int read(uint8_t *buf, uint length);
|
||||||
bool write(const std::vector<uint8_t> &buf);
|
bool write(const std::vector<uint8_t> &buf);
|
||||||
bool write(void *buf, uint length);
|
bool write(void *buf, uint length);
|
||||||
|
void consumeMsg(); // drains the remaining portion of the message
|
||||||
uint getLength(); // returns the total length of the msg
|
uint getLength(); // returns the total length of the msg
|
||||||
uint getRemainingLength(); // returns the remaining length from the caller's perspective
|
uint getRemainingLength(); // returns the remaining length from the caller's perspective
|
||||||
void handleError(const char *name, int errCode);
|
void handleError(const char *name, int errCode);
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
|
||||||
|
#include "StatTask.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
StatTask::StatTask(int sock, uint len) : PosixTask(sock, len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
StatTask::~StatTask()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void StatTask::run()
|
||||||
|
{
|
||||||
|
bool success;
|
||||||
|
uint8_t buf[1024] = {0};
|
||||||
|
|
||||||
|
if (getLength() > 1023) {
|
||||||
|
handleError("StatTask read", ENAMETOOLONG);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
success = read(buf, getLength());
|
||||||
|
check_error("StatTask read");
|
||||||
|
cmd_overlay *cmd = (cmd_overlay *) buf;
|
||||||
|
|
||||||
|
struct stat _stat;
|
||||||
|
// IOC->stat(cmd->path, &_stat);
|
||||||
|
|
||||||
|
// bogus response
|
||||||
|
memset(&_stat, 0, sizeof(_stat));
|
||||||
|
uint32_t *buf32 = (uint32_t *) buf;
|
||||||
|
buf32[0] = SM_MSG_START;
|
||||||
|
buf32[1] = sizeof(_stat);
|
||||||
|
memcpy(&buf[SM_HEADER_LEN], &_stat, sizeof(_stat));
|
||||||
|
write(buf, SM_HEADER_LEN + sizeof(_stat));
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
#ifndef STATTASK_H_
|
||||||
|
#define STATTASK_H_
|
||||||
|
|
||||||
|
#include "PosixTask.h"
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
class StatTask : public PosixTask
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StatTask(int sock, uint length);
|
||||||
|
virtual ~StatTask();
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
private:
|
||||||
|
StatTask();
|
||||||
|
|
||||||
|
struct cmd_overlay {
|
||||||
|
uint plen;
|
||||||
|
char path[];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
#include "TruncateTask.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
TruncateTask::TruncateTask(int sock, uint len) : PosixTask(sock, len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
TruncateTask::~TruncateTask()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void TruncateTask::run()
|
||||||
|
{
|
||||||
|
bool success;
|
||||||
|
uint8_t buf[1024] = {0};
|
||||||
|
|
||||||
|
if (getLength() > 1023) {
|
||||||
|
handleError("TruncateTask read", ENAMETOOLONG);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
success = read(buf, getLength());
|
||||||
|
check_error("TruncateTask read");
|
||||||
|
cmd_overlay *cmd = (cmd_overlay *) buf;
|
||||||
|
|
||||||
|
// IOC->truncate(cmd->filename, cmd->newSize);
|
||||||
|
|
||||||
|
// generic success msg
|
||||||
|
uint32_t *buf32 = buf;
|
||||||
|
buf32[0] = SM_MSG_START;
|
||||||
|
buf32[1] = 4;
|
||||||
|
buf32[2] = 0;
|
||||||
|
write(buf, 12);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
#ifndef TRUNCATETASK_H_
|
||||||
|
#define TRUNCATETASK_H_
|
||||||
|
|
||||||
|
#include "PosixTask.h"
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
class TruncateTask : public PosixTask
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TruncateTask(int sock, uint length);
|
||||||
|
virtual ~TruncateTask();
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
private:
|
||||||
|
TruncateTask();
|
||||||
|
|
||||||
|
struct cmd_overlay {
|
||||||
|
off64_t newSize;
|
||||||
|
uint flen;
|
||||||
|
char filename[];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
#include "UnlinkTask.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
UnlinkTask::UnlinkTask(int sock, uint len) : PosixTask(sock, len)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
UnlinkTask::~UnlinkTask()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnlinkTask::run()
|
||||||
|
{
|
||||||
|
bool success;
|
||||||
|
uint8_t buf[1024] = {0};
|
||||||
|
|
||||||
|
if (getLength() > 1023) {
|
||||||
|
handleError("UnlinkTask read", ENAMETOOLONG);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
success = read(buf, getLength());
|
||||||
|
check_error("UnlinkTask read");
|
||||||
|
cmd_overlay *cmd = (cmd_overlay *) buf;
|
||||||
|
|
||||||
|
// IOC->unlink(cmd->filename);
|
||||||
|
|
||||||
|
// generic success msg
|
||||||
|
uint32_t *buf32 = buf;
|
||||||
|
buf32[0] = SM_MSG_START;
|
||||||
|
buf32[1] = 4;
|
||||||
|
buf32[2] = 0;
|
||||||
|
write(buf, 12);
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
#ifndef UNLINKTASK_H_
|
||||||
|
#define UNLINKTASK_H_
|
||||||
|
|
||||||
|
#include "PosixTask.h"
|
||||||
|
|
||||||
|
namespace storagemanager
|
||||||
|
{
|
||||||
|
|
||||||
|
class UnlinkTask : public PosixTask
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UnlinkTask(int sock, uint length);
|
||||||
|
virtual ~UnlinkTask();
|
||||||
|
|
||||||
|
void run();
|
||||||
|
|
||||||
|
private:
|
||||||
|
UnlinkTask();
|
||||||
|
|
||||||
|
struct cmd_overlay {
|
||||||
|
uint flen;
|
||||||
|
char filename[];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user