Skip to content

Commit 846b825

Browse files
committed
Added setting for task tmpdir
1 parent c984406 commit 846b825

File tree

8 files changed

+44
-24
lines changed

8 files changed

+44
-24
lines changed

examples/task.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
$serv->set(array(
44
'worker_num' => 1,
55
'task_worker_num' => 1,
6+
//'task_tmpdir' => '/data/task/',
67
));
78
$serv->on('Receive', function(swoole_server $serv, $fd, $from_id, $data) {
89
//AsyncTask
@@ -57,4 +58,3 @@
5758
}
5859
});
5960
$serv->start();
60-

include/Server.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,8 @@ int swTaskWorker_large_pack(swEventData *task, void *data, int data_len);
462462
#define swTaskWorker_large_unpack(task, __malloc, _buf, _length) swPackage_task _pkg;\
463463
memcpy(&_pkg, task->data, sizeof(_pkg));\
464464
_length = _pkg.length;\
465-
_buf = __malloc(_length);\
465+
_buf = __malloc(_length + 1);\
466+
_buf[_length] = 0;\
466467
int tmp_file_fd = open(_pkg.tmpfile, O_RDONLY);\
467468
if (tmp_file_fd < 0){\
468469
swWarn("open(%s) failed. Error: %s[%d]", task->data, strerror(errno), errno);\

include/swoole.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1115,12 +1115,15 @@ typedef struct
11151115
* Timer used pipe
11161116
*/
11171117
uint8_t use_timer_pipe;
1118-
uint8_t task_ipc_mode;
1118+
11191119

11201120
/**
11211121
* task worker process num
11221122
*/
11231123
uint16_t task_worker_num;
1124+
char *task_tmpdir;
1125+
uint16_t task_tmpdir_len;
1126+
uint8_t task_ipc_mode;
11241127

11251128
uint16_t cpu_num;
11261129

php_swoole.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
#include "Client.h"
3838
#include "async.h"
3939

40-
#define PHP_SWOOLE_VERSION "1.7.6"
40+
#define PHP_SWOOLE_VERSION "1.7.7-alpha"
4141
#define PHP_SWOOLE_CHECK_CALLBACK
4242

4343
/**

src/network/TaskWorker.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ int swTaskWorker_onTask(swProcessPool *pool, swEventData *task)
4444
int swTaskWorker_large_pack(swEventData *task, void *data, int data_len)
4545
{
4646
swPackage_task pkg;
47-
memcpy(pkg.tmpfile, SW_TASK_TMP_FILE, sizeof(SW_TASK_TMP_FILE));
47+
memcpy(pkg.tmpfile, SwooleG.task_tmpdir, SwooleG.task_tmpdir_len);
4848

4949
#ifdef HAVE_MKOSTEMP
5050
int tpm_fd = mkostemp(pkg.tmpfile, O_WRONLY);
@@ -85,22 +85,22 @@ static void swTaskWorker_signal_init(void)
8585

8686
void swTaskWorker_onWorkerStart(swProcessPool *pool, int worker_id)
8787
{
88-
swServer *serv = pool->ptr;
89-
SwooleWG.id = worker_id + serv->worker_num;
88+
swServer *serv = pool->ptr;
89+
SwooleWG.id = worker_id + serv->worker_num;
9090

91-
SwooleG.use_timer_pipe = 0;
92-
SwooleG.use_timerfd = 0;
91+
SwooleG.use_timer_pipe = 0;
92+
SwooleG.use_timerfd = 0;
9393

94-
swTaskWorker_signal_init();
95-
swServer_worker_onStart(serv);
94+
swTaskWorker_signal_init();
95+
swServer_worker_onStart(serv);
9696

97-
char *tmp_dir = swoole_dirname(SW_TASK_TMP_FILE);
98-
//create tmp dir
99-
if (access(tmp_dir, R_OK) < 0 && swoole_mkdir_recursive(tmp_dir) < 0)
100-
{
101-
swWarn("create task tmp dir failed.");
102-
}
103-
free(tmp_dir);
97+
char *tmp_dir = swoole_dirname(SwooleG.task_tmpdir);
98+
//create tmp dir
99+
if (access(tmp_dir, R_OK) < 0 && swoole_mkdir_recursive(tmp_dir) < 0)
100+
{
101+
swWarn("create task tmp dir failed.");
102+
}
103+
free(tmp_dir);
104104
}
105105

106106
void swTaskWorker_onWorkerStop(swProcessPool *pool, int worker_id)

src/os/sendfile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ int swoole_sendfile(int out_fd, int in_fd, off_t *offset, size_t size)
7373
#elif !defined(HAVE_SENDFILE)
7474
int swoole_sendfile(int out_fd, int in_fd, off_t *offset, size_t size)
7575
{
76-
swWarn("no sendfile");
76+
swWarn("no have sendfile");
7777
return SW_ERR;
7878
}
7979
#endif

swoole.c

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,21 @@ PHP_FUNCTION(swoole_server_set)
940940
convert_to_long(*v);
941941
SwooleG.task_ipc_mode = (int)Z_LVAL_PP(v);
942942
}
943-
//max_conn
943+
/**
944+
* Temporary file directory for task_worker
945+
*/
946+
if (zend_hash_find(vht, ZEND_STRS("task_tmpdir"), (void **) &v) == SUCCESS)
947+
{
948+
convert_to_string(*v);
949+
SwooleG.task_tmpdir = emalloc(SW_DIR_MAXLEN);
950+
SwooleG.task_tmpdir_len = snprintf(SwooleG.task_tmpdir, SW_DIR_MAXLEN, "%s/task.XXXXXX", Z_STRVAL_PP(v)) + 1;
951+
}
952+
else
953+
{
954+
SwooleG.task_tmpdir = strndup(SW_TASK_TMP_FILE, sizeof(SW_TASK_TMP_FILE));
955+
SwooleG.task_tmpdir_len = sizeof(SW_TASK_TMP_FILE);
956+
}
957+
//max_connection
944958
if (zend_hash_find(vht, ZEND_STRS("max_connection"), (void **)&v) == SUCCESS ||
945959
zend_hash_find(vht, ZEND_STRS("max_conn"), (void **)&v) == SUCCESS)
946960
{
@@ -1800,7 +1814,7 @@ static int php_swoole_onTask(swServer *serv, swEventData *req)
18001814
if (swTaskWorker_is_large(req))
18011815
{
18021816
int data_len;
1803-
void *buf;
1817+
char *buf;
18041818
swTaskWorker_large_unpack(req, emalloc, buf, data_len);
18051819

18061820
/**
@@ -1868,7 +1882,7 @@ static int php_swoole_onFinish(swServer *serv, swEventData *req)
18681882
if (swTaskWorker_is_large(req))
18691883
{
18701884
int data_len;
1871-
void *buf;
1885+
char *buf;
18721886
swTaskWorker_large_unpack(req, emalloc, buf, data_len);
18731887

18741888
/**
@@ -2927,7 +2941,7 @@ PHP_FUNCTION(swoole_server_taskwait)
29272941
if (swTaskWorker_is_large(task_result))
29282942
{
29292943
int data_len;
2930-
void *buf;
2944+
char *buf;
29312945
swTaskWorker_large_unpack(task_result, emalloc, buf, data_len);
29322946
/**
29332947
* unpack failed
@@ -2937,7 +2951,7 @@ PHP_FUNCTION(swoole_server_taskwait)
29372951
efree(buf);
29382952
RETURN_FALSE;
29392953
}
2940-
RETURN_STRINGL(buf, data_len, 0);
2954+
RETURN_STRINGL(buf, data_len, 0);
29412955
}
29422956
else
29432957
{

swoole_config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@
137137
#define SW_USE_EVENTFD //是否使用eventfd来做消息通知,需要Linux 2.6.22以上版本才会支持
138138

139139
#define SW_TASK_TMP_FILE "/tmp/swoole/task.XXXXXX"
140+
141+
#define SW_DIR_MAXLEN 128
140142
#define SW_FILE_CHUNK_SIZE 65536
141143

142144
#define SW_TABLE_CONFLICT_PROPORTION 0.2 //20%

0 commit comments

Comments
 (0)